我们可以将char *传递给const string&?

时间:2013-11-28 10:54:09

标签: c++

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

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

  

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

是的,它相当于:

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