参考右值
Taking reference of rvalue
根据开放标准 (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2027.html)
这段代码应该报错:
A& a_ref3 = A(); // Error!
A&& a_ref4 = A(); // Ok
但是,我能够很好地完成第一行。第二行实际上对我来说是错误的。我正在 Visual Studio.
中使用 Visual C++14 进行编译
class foo {
};
int main()
{
foo x;
foo() = x; // Valid
foo& fr = foo(); // Valid
string&& foo = "hey"; // Valid r reference
foo&& frr = foo(); // Error!
return 0;
}
所以我想我的问题是 foo() 是左值吗?如果是这样,为什么 Stroustrup 说您不能为其分配引用类型?
foo& fr = foo();
在 VC++ 中工作,因为编译器 allows 它、clang 和 gcc 都拒绝这种语法。
另一方面,foo&& frr = foo();
是一个错误,因为您已重新声明 foo
并试图在未定义的 std::string
上调用 operator()
.
根据开放标准 (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2027.html)
这段代码应该报错:
A& a_ref3 = A(); // Error!
A&& a_ref4 = A(); // Ok
但是,我能够很好地完成第一行。第二行实际上对我来说是错误的。我正在 Visual Studio.
中使用 Visual C++14 进行编译class foo {
};
int main()
{
foo x;
foo() = x; // Valid
foo& fr = foo(); // Valid
string&& foo = "hey"; // Valid r reference
foo&& frr = foo(); // Error!
return 0;
}
所以我想我的问题是 foo() 是左值吗?如果是这样,为什么 Stroustrup 说您不能为其分配引用类型?
foo& fr = foo();
在 VC++ 中工作,因为编译器 allows 它、clang 和 gcc 都拒绝这种语法。
foo&& frr = foo();
是一个错误,因为您已重新声明 foo
并试图在未定义的 std::string
上调用 operator()
.