我知道已经有类似这个话题的内容了(例如这个)。
本话题中给出的例子是:
std::string & rs1 = std::string();
显然,std::string()是一个右值。然而,我的问题是为什么s1是合法的而s2不是?
const std::string& s1 = "String literal";
std::string& s2 = "String literal";
标准明确规定字符串字面量是左值(这是可以理解的,因为在幕后它们实际上是const char*)。但是当我编译s2时,我得到了以下结果:
prog.cpp:4:19: error: invalid initialization of non-const reference of type
'std::string& {aka std::basic_string<char>&}' from an rvalue of type
'const char*' std::string& s2 = "String literal";
我知道左值和右值的标准定义是互相排斥的,那么这可能是编译器的错误吗?在这个例子中,我使用的是gcc 4.9.2。这也是文字本身实际上是xvalue的一个案例吗?
const std::string & s2 = "String literal"
是完全有效的,然而显然std::string & s1 = "String literal"
不是。 - mbgdastd::string
的对象(这是库中的一种完全不同的东西)。 - Kerrek SB