const string& s = "rajat";
works while
string& s = "rajat";
doesn't. Why?
"rajat"
不是 a std::string
,它是一个以 null 结尾的六个数组char
,即char[6]
您可以std::string
从一个以 null 结尾的数组构造 a char
,这就是您编写时会发生的情况:
std::string s = "rajat";
当你想初始化 a 时string&
,你必须有一个string
要绑定到的引用,所以编译器会尝试string
从char
数组构造 a 并将引用绑定到那个,即
std::string& s = std::string("rajat");
但是这是非法的,因为string
构造的是临时对象,并且非常量引用不能绑定到临时对象,请参阅非 const 引用为什么不能绑定到临时对象?
string
这将隐式地从 RHS 上的字符串文字构造一个临时值。然后临时绑定到一个引用:
const string& s = "rajat";
// ^^^^^ temporary string is constructed from "rajat" literal
该语言只允许const
引用绑定到临时对象,所以这
string& s = "rajat";
是非法的,因为它试图将非常量引用绑定到临时string
.
请参阅此相关的 GotW 帖子,该帖子也涉及生命周期问题。