C++ 中的 constexpr lambda 表达式

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;

另请参阅

C++ 语言参考
C++ 标准库中的函数对象
函数调用
for_each