繁体   English   中英

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

[英]Modifying captured parameters in nested lambda: gcc vs clang?

clang切换到gcc时,我遇到了一种奇怪的行为。 gcc报告错误时, clang成功编译代码。 这是重现行为的最小示例。 我用c++14c++17尝试了这个,有多个clanggcc版本。

谁在这里,铿锵还是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM