gpt4 book ai didi

c++ - 修改嵌套lambda中捕获的参数 : gcc vs clang?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:13 26 4
gpt4 key购买 nike

clang 切换到 gcc 时,我遇到了一个奇怪的行为。 clang编译成功,gcc报错。这是重现该行为的最小示例。我已经尝试使用 c++14c++17 以及多个 clanggcc 版本。

谁在这里,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; }();
};

这与 clanggcc 一起编译。

关于c++ - 修改嵌套lambda中捕获的参数 : gcc vs clang?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57920265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com