我读了此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)

并牢记此图表

c++ - xvalues既不是glvalues又是rvalues?-LMLPHP

我很困惑。

如果 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/

10-11 18:51