c++ - 引用是从函数右值返回的吗?

标签 c++ c++11 reference rvalue

int a = 20;
int& fun(){
     return a;
}
int main(){
     fun();
     return 0;
}
函数引用是否由func rvalue本身返回?

最佳答案

否。如果函数返回左值引用,则调用该函数会得到一个左值。
如果它返回右值引用,则将得到一个xvalue,如果它按值返回,则将得到一个prvalue。
另外,严格说来,调用函数的结果不是引用。这是int类型的左值表达式。

通常,您可以通过将decltype应用于任何表达式来确定其值类别。它将为表达式的类型添加引用性,指示其类别:左值的&,x值的&&,而prvalue的则为空。
表达式本身不能具有引用类型,因此添加的引用性不会与它们的类型冲突。
例如,decltype(fun())int &,证明它是左值。
即使在这种情况下不适用,请注意decltype处理变量名称的方式与其他任何表达式不同(为您提供了变量的类型,而不是表达式类型+值类别)。解决方法是在变量名周围添加第二组(...),这使decltype将其视为任何其他表达式。

关于c++ - 引用是从函数右值返回的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63092240/

相关文章:

c++ - 将带有参数的回调函数传递给函数

c++ - 指针说明

c++ - 环境变量拆分为名称和值 c

c++ - 从 swig 返回 double * 作为 python 列表

c++ - 在类构造函数中为元素构造函数设置不同值的 std::vector

c++ - 可变参数模板 : "Sorry, unimplemented: cannot expand ' Identifier. 的 GCC 错误。 .' into a fixed-length argument list"

c++ - 使用 refprop.dll 调用在访问冲突读取位置出现未处理的异常

C++“不匹配运算符=”lambda函数中的错误

c++ - 指针引用可能检测到内存泄漏?

matlab - matlab函数中如何通过引用传递参数