以下函数有效(从 C++20 开始):
void foo() {
constexpr const int b { 123 };
constexpr const auto l1 = [](int a) { return b * a; };
(void) l1;
}
Run Code Online (Sandbox Code Playgroud)
即使l1不捕获任何内容,据说它仍然可以“无捕获捕获” 的值b,因为它是 a const(它甚至不必是constexpr;但请参阅@StoryTeller 的评论)。
但如果我尝试在新的 lambda 中捕获更复杂的东西:
void foo() {
constexpr const int b { 123 };
constexpr const auto l1 = [](int a) { return b * a; };
(void) [](int c) { return l1(c) * c; };
}
Run Code Online (Sandbox Code Playgroud)
这无法编译。为什么?l1编译器从 …