是从函数右值返回的引用吗?
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
将其视为任何其他表达式。
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
将其视为任何其他表达式。