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 * 0
、3 * 2
、5 * 4
等
为什么下面的代码片段输出是 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 * 0
、3 * 2
、5 * 4
等