参考右值

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() .