c ++ - 类类型的构造函数返回一个左值?

时间:2016-03-20 07:24:41

标签: c++ lvalue rvalue

为什么在第二行编译时第一行不编译?

float& t = float(10); // initial value of reference to non - const must be an lvalue
string& w = string("gg");

这是否意味着字符串构造函数返回左值?

2 个答案:

答案 0 :(得分:3)

定义中的构造函数没有返回值。您要执行的操作是引用不允许的临时值。

了解lvaluervalue引用的好文章是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)

请注意,这与所谓的"构造函数返回值"无关,因为构造函数没有这样的东西。