为什么在第二行编译时第一行不编译?
float& t = float(10); // initial value of reference to non - const must be an lvalue
string& w = string("gg");
这是否意味着字符串构造函数返回左值?
答案 0 :(得分:3)
定义中的构造函数没有返回值。您要执行的操作是引用不允许的临时值。
了解lvalue
和rvalue
引用的好文章是C++ Rvalue References Explained。
答案 1 :(得分:2)
你得到的不是你所期望的:
float& ref = float(10);
这里发生了什么? float(10)
创建一个临时浮点数(不绑定任何东西),因此它是 rvalue 。因此,您无法将其绑定到非const左值引用。
float const & cref = float(10); // OK!
std::string
涉及的机制与此相同。我很困惑你没有在字符串示例上得到编译器错误(我使用gcc 5.3.0)
请注意,这与所谓的"构造函数返回值"无关,因为构造函数没有这样的东西。