increment/decrement 和 C++ 中的输出流运算符优先级

increment/decrement and output stream operator precedence in c++

为什么下面的代码片段输出是 0 6 20 42 72 110 而不是 0 4 16 36 64 100

for(int i=0;i<11;i++){
    cout<< i * i++ <<" ";
}

根据C++ Operator Precedence Suffix/postfix 递增和递减的优先级高于乘法,这意味着 "i" 将在乘法之前递增。

编辑: 根据 Problem with operator precedence 问题,他们说 Operator precedence 不以任何方式确定运算符的执行顺序。运算符优先级只是定义了运算符和操作数之间的分组,那么cout<< i * i++ <<" ";如何分组呢?

无法保证 i * i++ 中操作数的计算顺序。您希望它是从左到右的,但您的编译器正在实现它是从右到左的。这意味着增量发生在计算左侧 i 之前,这意味着它打印 1 * 03 * 25 * 4