【发布时间】:2016-11-06 15:22:08
【问题描述】:
class Myclass
{
public:
Myclass() = default;
~Myclass() = default;
Myclass(Myclass&&) = default;
Myclass& operator=(Myclass&&) = default;
Myclass(const Myclass&) = delete;
Myclass& operator=(const Myclass&) = delete;
int i = 0;
};
Myclass GetObj()
{
Myclass obj;
return obj;
}
Myclass WrapperOfGetObj()
{
Myclass&& Wrapobj = GetObj();
Wrapobj.i = 1; // Will it work?
return std::move(Wrapobj);
}
int main()
{
return 0;
}
我有几个问题:
1) 在WrapperOfGetObj 函数中,Wrapobj 是xvalue,所以我可以为它的任何成员赋值(xvalue - 即将到期!!)
2)xvalue的存储是什么?这不是自动存储吗?
3) 当xvalue 变成glvalue 和当它变成rvalue 时。(上面上下文中的任何例子都会让我明白这一点)。
【问题讨论】:
-
WrapObj 是 xvalue 吗?否,因为值类别 {l|r|x} 值描述的是表达式而不是对象。检查链接stackoverflow.com/questions/9670954/…