从 clang
切换到 gcc
时,我遇到了一个奇怪的行为。 clang
编译成功,gcc
报错。这是重现该行为的最小示例。我已经尝试使用 c++14
和 c++17
以及多个 clang
和 gcc
版本。
谁在这里,clang 还是 gcc?
struct A {
int value;
};
auto makeCallback(const A& a) {
auto callback = [aCopy = a](int i) {
[aCopy, i]() mutable { aCopy.value = i; }();
};
return callback;
}
编辑:
将外部 lambda 更改为 mutable
,解决了 gcc
上的问题。
最佳答案
clang
是对的。内部闭包按值捕获 aCopy
,并且改变不影响外部闭包。 gcc
似乎对相关变量的相同名称感到困惑。您可以通过给它另一个名称来解决这个问题。示例:
auto callback = [aCopy = a](int i) {
[anotherName = aCopy, i]() mutable { anotherName.value = i; }();
};
这与 clang
和 gcc
一起编译。
关于c++ - 修改嵌套lambda中捕获的参数 : gcc vs clang?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57920265/