我最近意识到我可以这样做:
void someFunc(const std::string &str)
{
//content
}
...
someFunc("Hello World"); //this works我想知道它是如何工作的,为什么它会工作。
谢谢
发布于 2010-12-24 10:25:55
它之所以有效,是因为std::string有一个来自const char *的构造函数,该构造函数没有被标记为explicit。如果需要使参数匹配,C++编译器将插入对一个这样的构造函数(每个参数)的调用。
发布于 2010-12-24 10:28:54
您的示例实际上演示了相反的情况: const char数组被解释为std::string。(顺便说一下,字符串文字不是字符,它是一个字符数组( const char[N] -a char array ),而不是字符指针)。
它工作的原因是字符数组可以通过std::string的转换构造函数隐式转换为std::string。编译器将按照C++语言的重载解析规则为您执行转换。
发布于 2010-12-24 10:26:25
这之所以有效,是因为编译器在调用someFunc()之前在调用方中创建了一个std::string类型的临时对象。
编译后的代码将大致相当于以下代码:
{
std::string _temp1("Hello World");
someFunc(_temp1);
}(我将代码放在大括号中,以显示在调用someFunc()返回后将立即执行_temp1析构函数。)
https://stackoverflow.com/questions/4523841
复制相似问题