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

标签 c++ gcc clang c++14 c++17

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/

相关文章:

c++ - 如何使用循环一次显示循环信息?功能问题

c++ - C++ 中的 Linux 控制台命令(gcc 编译器)

c++ - 特定 C++ 随机数生成的 Clang 性能下降

c++ - GCC 和 Clang 不会对未使用的异常变量发出警告

C++11 static assert for equality comparable type?

c++ - -1、+1 的所有组合的 vector 的 vector

c++ - gdb 报告段错误 - 如何知道在哪里?

c++ - objdump 为使用和不使用 -fPIC 生成的目标文件提供相同的输出

c++ - 为什么在我键入名称时我的可执行文件不会运行? (Mac OS X 山狮) Mac OS X 10.8.2

Xcode 命令行构建失败并显示 "Failed to read entitlements"