Sdílet prostřednictvím


výrazy constexpr lambda v jazyce C++

Visual Studio 2017 verze 15.3 a novější (dostupné v /std:c++17 režimu a novější): Výraz lambda může být deklarován jako constexpr nebo použit v konstantním výrazu při inicializaci každého člena dat, který zachycuje nebo zavádí, je povolen v rámci konstantního výrazu.

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

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

Lambda je implicitně constexpr v případě, že jeho výsledek splňuje požadavky constexpr funkce:

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

    constexpr int response = answer(10);

Pokud je lambda implicitně nebo explicitně constexpra převedete ji na ukazatel funkce, výsledná funkce je také constexpr:

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

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

Viz také

Referenční dokumentace jazyka C++
Objekty funkcí ve standardní knihovně C++
Volání funkcí
for_each