以下C++代碼使編譯器GCC(6.3.0)和Clang(3.8.0)變得瘋狂。Lambda捕獲數組元素失敗
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開始就是合法的。 – Rakete1111
你也可以通過引用來捕獲整個'v'。 –
是的,val = v [3]在C++中是legall 14。 –