首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lambda函数/表达式是否支持常量表达式?

lambda函数/表达式是否支持常量表达式?
EN

Stack Overflow用户
提问于 2011-06-21 11:39:56
回答 4查看 22.6K关注 0票数 65
代码语言:javascript
复制
struct Test
{
  static const int value = []() -> int { return 0; } ();
};

使用gcc-4.6时,我得到的结果类似于error: function needs to be constexpr。我尝试过将constexpr放在不同位置的多种组合,但没有成功。

lambda函数是否也支持constexpr (不管是否指定了return类型)?正确的语法是什么?

有没有可能的变通办法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-09-21 22:06:08

更新:从C++17开始,在常量表达式中允许使用lambda。

根据expr.const/(2.6),当前不允许在常量表达式中使用Lambdas (C++14),但是一旦被接受(可以在工作草案N4582中找到):

这个提议建议允许在常量表达式中使用lambda表达式,取消现有的限制。作者建议允许某些lambda表达式和对某些闭包对象的操作出现在常量表达式中。为此,我们还建议,如果闭包类型的每个数据成员的类型都是文字类型,则将其视为文字类型;如果在lambda声明符中省略了constexpr说明符,则如果生成的函数调用运算符满足constexpr函数的要求,则生成的函数调用运算符为constexpr (类似于已经对隐式定义的构造函数和赋值运算符函数进行的constexpr推断)。

票数 36
EN

Stack Overflow用户

发布于 2011-06-21 11:48:30

从C++0x FDIS§7.1.5dcl.stexpr/1:

constexpr说明符只能应用于变量的定义、函数或函数模板的声明或文本类型的静态数据成员的声明。

lambda表达式不是这些东西,因此不能被声明为constexpr

票数 27
EN

Stack Overflow用户

发布于 2016-08-09 18:35:20

早于C++17的lambda与constexpr不兼容。它们不能在常量表达式中使用。

以C++17 lambda开始的在有意义的地方是constexpr。建议的N4487将被放入C++17标准中。国际标准化组织C++委员会主席Herb Sutter在his website上说:

Lambdas现在是allowed inside constexpr functions

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6420085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档