小编Bak*_*ish的帖子

构造函数主体中的 lambda 中使用的非常量本地成员的“只读变量增量”错误

我正在尝试创建一个类,其中在构造函数的主体中,本地成员变量被初始化并在 lambda 中重用,该 lambda 也直接在构造函数的主体中初始化。一个非常简单的版本如下所示:

\n
#include <iostream>\n\nclass TestClass {\n    public:\n    TestClass()\n    {\n        auto localMember = 0;\n        const auto incrementAndDisplay = [localMember] {\n            localMember++;\n            std::cout << "Member value is now increased to: " << localMember << std::endl;\n        };\n\n        incrementAndDisplay();\n    }\n};\n\nint main()\n{\n    TestClass testClass;\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是,这段代码无法编译。对于修改本地成员的行,GCC 会抛出以下错误消息:

\n
main.cpp:9:13: error: increment of read-only variable \xe2\x80\x98localMember\xe2\x80\x99\n    9 |             localMember++;\n      |             ^~~~~~~~~~~\n
Run Code Online (Sandbox Code Playgroud)\n

我对这个错误消息感到困惑,因为我从未将此变量标记为const并且可以在 lambda 之外修改它而不会出现任何问题。但是,如果我声明localMember为类成员,代码将编译没有任何问题。
\n此时我最好的猜测是 lambda 似乎无法“正确”访问成员,因为它只是一个临时值,稍后可能会被丢弃。然而,我的看法可能完全错误。
\n问题是:有没有办法在 lambda 中使用该变量,而不使其成为类成员?如果这是不可能的,为什么不呢?

\n

c++ lambda

4
推荐指数
1
解决办法
80
查看次数

标签 统计

c++ ×1

lambda ×1