[英]Is an expression involving function type an lvalue or an rvalue?
void fn() {}
void (&lref)() = fn;
void (&&rref)() = fn;
int main() {}
在g ++ 4.8.1下编译得很好。
因此, fn
是一个表达式,表达式必须具有符合ISO标准的类别。
在执行任何自动类型提升之前,表达式属于哪个类别 (因为两个引用都可以接受评估表达式fn
的结果)?
根据C ++ 11 3.10 / 1,函数始终是左值。 所以表达式fn
是一个左值。
根据8.5.3 / 5,正确的类型函数可用于初始化右值引用:
否则,引用应是对非易失性const类型的左值引用(即, cv1应为
const
), 或者引用应为右值引用。
如果是初始化表达式
- 是xvalue,类prvalue,数组prvalue或函数lvalue ,“ cv1
T1
”与“ cv2T2
”引用兼容,或者- ...
然后引用绑定到第一种情况下初始化表达式的值...
(缩短,强调我的)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.