涉及函数类型为左值或右值的表达式

Is an expression involving function type an lvalue or an rvalue?

本文关键字:表达式 函数 类型      更新时间:2023-10-16
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,正确类型的函数可用于初始化右值引用:

  • 否则,引用应为非易失性常量类型的左值引用(即 cv1 应为 const (,或 引用应为右值引用。

    • 如果初始值设定项表达式

      • 是一个 xValue、类 prvalue、数组 prvalue 或函数 lvalue,并且 "cv1 T1" 与 ">cv2 T2" 引用兼容, 或

      则在第一种情况下,引用将绑定到初始值设定项表达式的值...

(缩短,强调我的(