修改嵌套 lambda 中捕获的参数:gcc 与 clang?
Modifying captured parameters in nested lambda: gcc vs clang?
我在从clang
切换到gcc
时遇到了奇怪的行为。clang
成功编译代码,同时gcc
报告错误。下面是重现该行为的最小示例。我已经尝试过c++14
,c++17
有多个clang
和gcc
版本。
谁就在这里,叮当还是 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
进行编译。
相关文章:
- 奇怪的结构&GCC&clang(void*返回类型)
- 如何让 GCC/Clang 在保留标识符上出错
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- GCC/CLang不同意模板模板参数的部分特化
- 在 gcc/clang (C++) 中获取函数范围之外的标签地址
- C++指向成员的指针的类内初始化会使 MSVC 失败(但 GCC/Clang 工作)
- ICC 中的 -O2 搞砸了汇编程序,ICC 中的 -O1 和 GCC / Clang 中的所有优化都很好
- 为什么GCC/Clang甚至在最高优化水平上也不会内联
- 在继承多个空类时,了解GCC/Clang vs MSVC2015之间的不同填充规则
- C++ MSVC/GCC/Clang编译器错误
- 这被认为是有效的C 11还是C 14?还是GCC/Clang弄错了
- GCC/Clang上的模板错误,但在MSVC上没有错误
- 如何求解与GCC/Clang不同的C 功能模板的MSVC处理(无法识别的模板定义)
- 忽略 gcc/clang 的"-Wmissing-braces"警告是否明智?
- GCC/Clang 返回元组时x86_64 C++ ABI 不匹配?
- 为什么根据 C++11 标准,std::seed_seq是不可复制的,为什么 gcc/clang 不符合?
- 我可以用更新的 gcc/clang 定位较旧的 Linux 吗?C++
- gcc/clang:错误:未知类名"异常";你是说'std::exception'
- 模板专业化和DLL:Visual Studio vs. (GCC / Clang)
- 使用GCC/CLANG跟踪代码膨胀的工具