我正在尝试使用C ++ 11引入的不同值类别,然后我尝试了一系列代码,在我看来这是没有意义的,但无论如何编译没有警告:< / p>
#include <iostream>
using namespace std;
class A
{
public:
int val;
A() : val(10) {}
A(const A& other) : val(other.val) {}
A(A&& other) : val(other.val) {}
};
int main()
{
A& a = A();
cout << a.val << endl; // prints '10'
return 0;
}
关注我的一行:
A& a = A();
现在,根据我的理解(这可能是错误的),A()
是一个prvalue。在我看来,这意味着它是一个暂时的,它没有超出它出现的表达的生命周期。
这是否意味着引用类型a
不能绑定到它?
我环顾四周,找不到这种行为被认为是正确的任何地方,这是可以理解的,因为它没有概念意义(至少对我来说)。引用类型a
肯定会引用某些内容,因为我可以正常访问val
。
所以我的问题是,这个代码是非标准的,只是根据VS有效,或者这里有什么东西我完全被误解了(很可能)?