我们可以将char*传递给const string&;吗;? C++中的下面代码是否可以接受?如果是,会发生什么?它是否创建临时字符串变量并传递其地址 void f(const string& s) { } const char kJunk[] = "junk"; f(kJunk);

我们可以将char*传递给const string&;吗;? C++中的下面代码是否可以接受?如果是,会发生什么?它是否创建临时字符串变量并传递其地址 void f(const string& s) { } const char kJunk[] = "junk"; f(kJunk);,c++,C++,是的,可以接受。编译器将调用字符串(const char*)构造函数,并创建一个在调用期间绑定到s的临时构造函数。当fall tof返回时,临时对象将被销毁。字符数组的参数隐式转换为std::string类型的临时对象,编译器将对该临时对象的常量引用传递给函数。当带有函数调用的语句将完成其工作时,临时对象将被删除 它是否创建临时字符串变量并传递其地址 void f(const string& s) { } const char kJunk[] = "junk"; f(kJunk); 是

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

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

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

void f(const string& s) {
}
const char kJunk[] = "junk";
f(kJunk);
是的,它相当于:

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

尝试这个过程只需要不到一分钟的时间……很好,它确实创建了一个临时字符串对象并传递了一个引用。你的化身不批准使用C++,你显然做得不对。下面是很好的答案。有人(或你们所有人)应该描述一下为什么这是可以的,但为什么它不适用于采用非常量
字符串的方法&
@Grimm操作员:我刚才正在考虑这个问题,并尝试使用使用字符串的方法&。没有编译,因为没有使用非常量char*的字符串构造函数。我认为这是一个与常量正确性有关的问题。简而言之:不能使用非常量字符串&as参数。