从clang
切换到gcc
时遇到奇怪的行为。 clang
报告错误时,gcc
成功编译了代码。这是重现该行为的一个最小示例。我已经尝试了c++14
和c++17
以及多个clang
和gcc
版本。
谁在这里,c还是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/