【发布时间】:2017-06-11 14:38:13
【问题描述】:
下面的 C++ 代码让编译器 GCC(6.3.0) 和 Clang (3.8.0) 发疯了。
for (auto v : vectors2d)
for_each (begin(ret), end(ret), [v[3]] (int &n) { n+= v[3];});
虽然下面的很好
for (auto v : vectors2d) {
auto val = v[3];
for_each (begin(ret), end(ret), [val] (int &n) { n+= val;});
}
我知道在 C++ 14 中我可以做类似的事情
for (auto v : vectors2d)
for_each (begin(ret), end(ret), [val=v[3]] (int &n) { n+= val;});
GCC 中的错误是
expected identifier before '[' token
叮当说
expected ',' or ']' in lambda capture list
我的问题是:为什么[v[3]] 出现在捕获列表中是非法的?
【问题讨论】:
-
我很确定
[val=v[3]]自 C++14 以来是合法的。 -
您也可以通过引用捕获整个
v。 -
是的,val=v[3] 在 C++14 中是合法的。
-
那你问的是什么版本? C++11?
-
[v[3]] 在我认为的所有版本中都是非法的
标签: c++ gcc lambda language-lawyer clang++