gpt4 book ai didi

c++ - boost lambda for_each/转换拼图

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:03 26 4
gpt4 key购买 nike

谁知道为什么

  vector<int> test(10);
int a=0;

for_each(test.begin(),test.end(),(_1+=var(a),++var(a)));

for_each(test.begin(),test.end(),(cout << _1 << " "));
cout << "\n"

给出:“0 1 2 3 4 5 6 7 8 9”

但是

  transform(test.begin(),test.end(),test.begin(), (_1+=var(a),++var(a)));
...(as before)

给出:“1 2 3 4 5 6 7 8 9 10”

?

最佳答案

逗号运算符从左到右求值,所以

_1+=var(a), ++var(a)

是++var(a),您将使用转换版本存储它。

  • for_each:

    _1 += var(a) 被评估,更新你的序列(通过 lambda _1),然后++var(a) 被评估,但这对你的序列没有影响。

  • 转换:

    _1+=var(a) 被评估,更新你的序列(就像以前一样),然后++var(a) 被评估,这也给出了整个表达式的结果,然后用于再次更新你的序列(通过转换)

关于c++ - boost lambda for_each/转换拼图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/317087/

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