gpt4 book ai didi

c++ - Lambda 捕获数组元素失败

转载 作者:太空狗 更新时间:2023-10-29 19:51:25 25 4
gpt4 key购买 nike

以下 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

clang

expected ',' or ']' in lambda capture list

我的问题是:为什么 [v[3]] 出现在捕获列表中是非法的?

最佳答案

My question is why it is illegal for [v[3]] in capture list?

如 N4141 中的 5.1.2/1 [expr.prim.lambda] 所述,捕获列表中的项目应为简单捕获初始捕获.

前者是任何

  • 标识符
  • & 标识符
  • 这个,

后者要么是标识符初始化器,要么是& 标识符初始化器

v[3] 不符合以上任何一项,因此被编译器正确拒绝。

关于c++ - Lambda 捕获数组元素失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44485030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com