相关疑难解决方法(0)

为什么我可以“无捕获捕获”一个 int 变量,但不能“捕获”非捕获 lambda?

以下函数有效(从 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编译器从 …

c++ lambda language-lawyer c++20

5
推荐指数
1
解决办法
272
查看次数

标签 统计

c++ ×1

c++20 ×1

lambda ×1

language-lawyer ×1