提升lambda for_each/transform puzzle

Chr*_*ver 4 c++ lambda boost

有谁知道为什么

  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"
Run Code Online (Sandbox Code Playgroud)

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

  transform(test.begin(),test.end(),test.begin(), (_1+=var(a),++var(a)));
  ...(as before)
Run Code Online (Sandbox Code Playgroud)

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

Pie*_*ter 9

逗号运算符从左到右进行求值,因此结果为

_1+=var(a), ++var(a)
Run Code Online (Sandbox Code Playgroud)

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

  • 的for_each:

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

  • 转变:

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