我有一个可编译的代码,它看起来像:
void test1(const std::string &name)................
test1("myName");
但是,如果我将const
声明中的删除为:
void test2(std::string &name)................
test2("myName");
该代码只是不编译。
为什么要const std::string
编译?据我了解,相同的隐式构造函数将被调用char *
以将转换为std::string
。
我正在使用Visual Studio 2013,以防可能与答案有关。
当隐式转换发生时,您会得到一个临时值 std::string
(从技术上来说,重要的是它是一个xvalue)。您不能将临时绑定到左值引用,std::string &
但可以绑定到const左值引用const std::string &
或右值引用std::string &&
。
同样的事情在这里发生:
const int &x = 5;
int &x = 5; // error
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句