从 const char * 到 const std::string & 的转换

Conversion from const char * to const std::string &

本文关键字:const string 转换 std char      更新时间:2023-10-16

我认为以下代码应该会产生错误:

#include <iostream>
#include <string>
static void pr(const std::string &aStr)
{
    std::cout << aStr << "n";
}
int main(void)
{
    const char *a = "Hellu";
    pr(a);
    return 0;
}

但是 gcc 4.1.2 成功地编译了它。

是 std::string 的构造函数妨碍了创建 std::string 的实例吗?

我认为不应该,因为引用只是变量的别名(在这种情况下,没有引用引用所引用的 std::string 类型的变量)。

有人在那里解释为什么代码可以成功编译吗?

提前谢谢。

是的,给定对常量的引用,编译器可以/将合成一个临时的(在本例中为 std::string 类型)并将引用绑定到该临时的。

但是,如果引用不是对 const 对象的引用,那就行不通了——只有对 const 的引用才能绑定到这样的临时对象(尽管至少广泛使用的编译器允许非 const 引用也绑定到引用)。

您遇到的是隐式转换。

以下是C++标准(SC22-N-4411.pdf)的引述

1 类对象的类型转换可以由构造函数和转换函数指定。这些转换称为用户定义的转换,用于隐式类型转换(子句 4)、初始化 (8.5) 和显式类型转换(5.4、5.2.9)。

因此,编译器只是按预期工作并调用您提到的std::string构造函数。