C ++中是否可以接受以下代码?如果是这样,会发生什么?它是否创建临时字符串变量并传递其地址?
void f(const string& s) {
}
const char kJunk[] = "junk";
f(kJunk);
答案 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));