繁体   English   中英

涉及函数类型的表达式是左值还是右值?

[英]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 ”与“ cv2 T2 ”引用兼容,或者
      • ...

      然后引用绑定到第一种情况下初始化表达式的值...

(缩短,强调我的)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM