C++ での constexpr ラムダ式constexpr lambda expressions in C++

Visual Studio 2017 バージョン15.3 以降( /std: c++ 17で利用可能): ラムダ式は、 constexpr キャプチャまたは導入される各データメンバーの初期化が定数式内で許可されている場合に、定数式として宣言または使用できます。Visual Studio 2017 version 15.3 and later (available with /std:c++17): A lambda expression may be declared as constexpr or used in a constant expression when the initialization of each data member that it captures or introduces is allowed within a constant expression.

    int y = 32;
    auto answer = [y]() constexpr
        int x = 10;
        return y + x;

    constexpr int Increment(int n)
        return [n] { return n + 1; }();

ラムダは、 constexpr 結果が関数の要件を満たす場合に暗黙的に行われ constexpr ます。A lambda is implicitly constexpr if its result satisfies the requirements of a constexpr function:

    auto answer = [](int n)
        return 32 + n;

    constexpr int response = answer(10);

ラムダが暗黙的または明示的に使用され constexpr 、関数ポインターに変換された場合、結果として得られる関数も次のようになり constexpr ます。If a lambda is implicitly or explicitly constexpr, and you convert it to a function pointer, the resulting function is also constexpr:

    auto Increment = [](int n)
        return n + 1;

    constexpr int(*inc)(int) = Increment;

関連項目See also

C++ 言語リファレンスC++ Language Reference
C++ 標準ライブラリの関数オブジェクトFunction Objects in the C++ Standard Library
関数呼び出しFunction Call