涉及函数类型为左值或右值的表达式
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,正确类型的函数可用于初始化右值引用:
否则,引用应为非易失性常量类型的左值引用(即 cv1 应为
const
(,或 引用应为右值引用。
如果初始值设定项表达式
- 是一个 xValue、类 prvalue、数组 prvalue 或函数 lvalue,并且 "cv1
T1
" 与 ">cv2T2
" 引用兼容, 或- 。
则在第一种情况下,引用将绑定到初始值设定项表达式的值...
(缩短,强调我的(
相关文章:
- C++模板函数中的初始化 - 新的初始值设定项表达式列表被视为复合表达式
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 函数返回的 rvalue 引用(表达式)是 xvalue - 但没有标识?
- 折叠表达式和函数名称查找
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- 不是 lambda 函数中的常量表达式
- 保证逻辑 AND 表达式中的函数调用
- 函数调用在常量表达式中必须具有常量值
- Tbb 库:错误:编写自定义类函数而不是 lambda 表达式时,对函数的调用不匹配
- 错误:表达式不能用作函数
- 使用表达式 SFINAE 的函数模板的类外定义
- std::cout 在打印变量与函数表达式时的行为不同
- 构造函数中缺少表达式
- 如何在使用模板的函数调用的大括号表达式中推导多维数组的大小
- C++98 中的常量表达式函数
- gcc 是否将非常量表达式函数的内置视为常量表达式
- 试图理解基本的正则表达式函数在c++
- 错误:','令牌之前的预期主表达式 //函数调用