有谁知道为什么
vectortest(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),这也给出整个表达式的结果,然后用于再次更新你的序列(通过转变)