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

标签 c++ boost lambda

谁知道为什么

  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/

相关文章:

C++//非静态数据成员的无效使用

c++ - 如何确定用户输入的是字符串中的数字

c++ - GRPC 为 Google Assistant API 创建 channel 链接

python - 使用 Lambda 和元组发送到多个函数 : Python, Tkinter

c++ - MSVC 无法识别继承模板类的模板类的 'direct' 基类构造函数

c++ - Boost Type Erasure的实践与发现

function - 如何确定 boost::function 类型的签名?

C++:Boost:如何检查我的工作目录中另一个文件夹中是否存在一个文件夹?

python - 如何将压缩列表项相互相乘?

python - heapq.nlargest() 的关键函数