Visual Studio 2017 版本 15.3 及更高版本 (在 /std:c++17
模式和更高版本中可用):在常量表达式中允许初始化捕获或引入的每个数据成员时,可以将 lambda 表达式声明为 constexpr
,或在常量表达式中使用它。
int y = 32;
auto answer = [y]() constexpr
{
int x = 10;
return y + x;
};
constexpr int Increment(int n)
{
return [n] { return n + 1; }();
}
如果 Lambda 结果满足 constexpr
函数的要求,则 Lambda 是隐式的 constexpr
:
auto answer = [](int n)
{
return 32 + n;
};
constexpr int response = answer(10);
如果 lambda 是隐式或显式的 constexpr
,并且将其转换为函数指针,则生成的函数也是 constexpr
:
auto Increment = [](int n)
{
return n + 1;
};
constexpr int(*inc)(int) = Increment;