我们可以将字符*传递给常量字符串&吗?

Can we pass a char* to const string&?

本文关键字:常量 字符串 字符 我们      更新时间:2023-10-16

以下代码在C++中可以接受吗?如果是,会发生什么?它是否创建一个临时字符串变量并传递其地址?

void f(const string& s) {
}
const char kJunk[] = "junk";
f(kJunk);

是的,可以接受。编译器将调用string(const char *)构造函数,并创建一个临时构造函数,该构造函数将在调用期间绑定到s。当下降到f返回时,临时将被销毁。

作为字符数组的参数被隐式转换为std::string类型的临时对象,编译器将对该临时对象的const引用传递给函数。当带有函数调用的语句将完成其工作时,临时对象将被删除。

它是否创建一个临时字符串变量并传递其地址?

是的,它相当于:

void f(const std::string& s) {
}
const char kJunk[] = "junk";
f(std::string(kJunk));