iam*_*ind 55 c++ lambda constexpr c++11
struct Test
{
static const int value = []() -> int { return 0; } ();
};
Run Code Online (Sandbox Code Playgroud)
使用gcc-4.6我会得到类似的东西error: function needs to be constexpr
.我已经尝试了多种组合放置constexpr
在不同的地方,但没有运气.
也constexpr
支持lambda函数(不管return
指定的类型与否)?什么是正确的语法?
任何可能的工作?
Col*_*mbo 28
更新:从C++ 17开始,lambdas被允许在常量表达式中.
根据[expr.const] /(2.6),Lambdas目前(C++ 14)不允许在常量表达式中使用,但是一旦N4487被接受(可以在工作草案N4582中找到):
该提议建议在常量表达式中允许lambda表达式,从而删除现有限制.作者提出允许某些闭包对象的某些lambda表达式和操作出现在常量表达式中.在这样做时,如果每个数据成员的类型是文字类型,我们还建议将闭包类型视为文字类型; 并且,如果
constexpr
在lambda声明符中省略了说明符,则生成的函数调用运算符constexpr
是否满足constexpr
函数的要求(类似于constexpr
已经发生的隐式定义的构造函数和赋值运算符函数的 推断).
Jam*_*lis 25
从C++ 0xFDIS§7.1.5[dcl.constexpr]/1:
的
constexpr
说明符将只适用于一个变量,函数或函数模板的声明,或文字类型的静态数据成员的声明中的定义.
lambda表达式不是那些东西,因此可能不会被声明constexpr
.
Ral*_*zky 11
在C++ 17之前, lambdas与之不兼容constexpr
.它们不能在常量表达式中使用.
从C++ 17开始, lambdas是constexpr
有意义的.N4487提案将被纳入C++ 17标准.在他的网站上,ISO C++委员会主席Herb Sutter表示如下:
Lambda现在允许在constexpr函数中.
小智 6
FFWD 到 2018 年 :)
auto my_const_expression_lambda = []()
constexpr -> bool
{
return true ;
}
Run Code Online (Sandbox Code Playgroud)
从 C++17
归档时间: |
|
查看次数: |
15320 次 |
最近记录: |