我读了此answer,引起我注意的部分是:
int i;
int* p = &i;
int& f();
int&& g();
int h();
h() // prvalue
g() // glvalue (xvalue)
f() // glvalue (lvalue)
i // glvalue (lvalue)
*p // glvalue (lvalue)
std::move(i) // glvalue (xvalue)
并牢记此图表
我很困惑。
如果 glvalue 是左值或xvalue,而 rvalue是prvalue或xvalue,那么说
g()
是glvalue而不说它也是rvalue是不对的?与std::move(i)
相同。我上面的代码版本如下所示:
h() // rvalue (prvalue)
g() // glvalue and rvalue (xvalue)
f() // glvalue (lvalue)
i // glvalue (lvalue)
*p // glvalue (lvalue)
std::move(i) // glvalue and rvalue(xvalue)
至于标准所说的(我只引用最相关的部分):
和
当然,我可能是错的。如果是这样,请帮我一点忙:)
最佳答案
是的。
如果g()
是一个xvalue,则它既是glvalue又是rvalue。
关于c++ - xvalues既不是glvalues又是rvalues?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44848970/