【C++】泛型lambda和constexpr lambda

1.

泛型 lambda(Generic Lambda)是在 C++14 中引入的,而不是 C++17。
在 C++14 中,lambda 表达式支持使用 auto 作为参数类型,从而实现泛型功能。例如:

auto add = [](auto a, auto b) { return a + b; };
std::cout << add(1, 2) << std::endl;     // 输出 3
std::cout << add(1.5, 2.5) << std::endl; // 输出 4

2.

在 C++17 之前,lambda 表达式不能用于编译期计算(即不能是 constexpr)。从 C++17 开始,只要满足 constexpr 函数的要求(如无副作用、仅调用其他 constexpr 函数等),lambda 表达式可以被声明为 constexpr,从而支持编译期求值。

  • 捕获的变量也必须是 constexpr 的
constexpr auto add = [](int x, int y) constexpr {
    return x + y;
};

static_assert(add(2, 3) == 5, "Compile-time addition failed");

add 是在编译期执行的,static_assert 也是在编译期验证其结果

posted @ 2025-08-05 17:24  仰望星河Leon  阅读(21)  评论(0)    收藏  举报