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

Is the reference returned from the function rvalue?

int a = 20;
int& fun(){
     return a;
}
int main(){
     fun();
     return 0;
}

func右值本身返回的引用是?

没有。如果一个函数 returns 是一个左值引用,那么调用它会给你一个左值。

如果它 returns 一个右值引用,你得到一个 xvalue,如果它 returns 按值,你得到一个 prvalue。

另外,严格来说调用函数的结果不是引用。它是 int.

类型的左值表达式

一般来说,您可以通过对其应用 decltype 来确定任何表达式的值类别。它将为表达式的类型添加引用性,指示其类别:& 用于左值,&& 用于 xvalues,无任何内容用于 prvalues。

表达式本身不能有引用类型,因此这种添加的引用不会与其类型冲突。

例如,decltype(fun())int &,证明它是一个左值。

即使在这种情况下不适用,请注意 decltype 处理变量名称的方式与任何其他表达式不同(为您提供变量类型,而不是表达式类型 + 值类别)。解决方法是在变量名称周围添加第二组 (...),这使得 decltype 将其视为任何其他表达式。