【发布时间】:2018-12-06 05:16:11
【问题描述】:
#include<iostream>
using namespace std;
int main()
{
const int k = 10;
// Capture k by value
auto myl = [k] (int k) { cout << " ++k=" << ++k ; };
myl(k+10);
}
以下错误
lamda.cpp: In lambda function:
lamda.cpp:10:50: error: increment of read-only variable âkâ
auto myl = [k] (int k) { cout << " ++K=" << ++k ; };
显然我指的是局部变量 K 而不是 const 成员 K。
【问题讨论】:
-
你确定你可以用 Clang 编译它吗?您有名称拦截,因为您与名为 k 的 lambda 函数形式参数共享常量“k”。如果 clang 能够编译它 - 您可能可以使用 GCC 5+ 和
-std=c++14键对其进行测试。无论如何,您的代码都有错误。 -
除了 8.1 之外的所有 gcc 编译器都失败了,我们可以在这里看到它。godbolt.org/g/o355oQ
-
也许相关的是 GCC 8.1 支持 C++2a 的某些特性,所以也许是故意的。
-
这与c++2无关clang从3.4.1版本开始编译godbolt.org/g/B46sX9
标签: c++ c++11 gcc clang gcc4.8