gpt4 book ai didi

c++ - 右值引用和 xvalue 有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-31 00:57:52 25 4
gpt4 key购买 nike

我是 C++ 的新手,这是我的第一个问题,所以请多多包涵……我已经阅读左值和右值有一段时间了,我想我理解了其中的大部分内容,但仍有一些内容令人困惑我 ... 所以我的问题会很具体

右值引用被认为是左值(这部分我理解)但是返回右值引用的函数被认为是右值(或特定的 xvalue)例如:

int x = 32;
int& Lref = x; // Lref is lvalue ... ok
int& funcA(); // calling funcA() is lvalue ... ok

int&& Rref = 32; // Rref is lvalue ... ok I got this
int&& funcB(); // calling funcB() is rvalue ... Why?

所以问题是:为什么调用返回右值引用的 funcB() 被认为是右值?

提前致谢。

最佳答案

要回答标题问题,“右值引用”是一种类型,而“xvalue”是一种表达式。

rvalue references are considered lvalue (this part I understand)

他们不是。右值引用是类型,类型不是表达式,因此不能被“视为左值”。您指的是这样一个事实,即如果表达式仅由 T&& 类型的变量名称组成,那么它就是 T 类型的左值表达式。

why calling funcB() which return rvalue reference is considered rvalue

最直接的答案是“根据定义”。函数返回类型为 T&& 的函数调用表达式是 T 类型的 xvalue 表达式。至于动机,这正是让 std::move 做它所做的事情的原因:赋予任何表达式以被移动的能力(也称为“右值类别” - 参见 http://en.cppreference.com/w/cpp/language/value_category )。

关于c++ - 右值引用和 xvalue 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36557310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com