C++中--x与x--运算疑惑:为何y=--x*x--结果为12而非16?
关于C++表达式
y = --x * x--的结果分析 你的推理错误在于默认了--x和x--的执行顺序,但这段代码的行为在C++标准里属于未定义行为——同一个表达式中对同一个变量进行多次修改,且没有明确的规则约束这些修改的执行顺序。
简单说,编译器完全可以自由选择先执行--x还是x--,不同的执行顺序会给出不同结果:
- 按你设想的顺序,先
--x(x变为4)再x--(运算时用4,之后x变3),结果是4*4=16; - 如果先执行
x--(运算时用5,之后x变4)再--x(x变为3),结果是3*5=15; - 你遇到的答案12,是编译器特定实现下的结果,但本质上这都是未定义行为导致的不确定输出。
C++标准明确规定:在一个表达式中,若对同一个对象的两次修改操作之间没有序列点分隔,表达式的行为是未定义的。这意味着任何结果都可能出现,完全取决于编译器的实现逻辑或优化级别。
如果想要得到确定的结果,必须拆分表达式,让每一步的修改都有明确的顺序,比如:
int x, y; x = 5; int temp1 = --x; // x变为4,temp1=4 int temp2 = x--; // temp2=4,x变为3 y = temp1 * temp2; std::cout << y; // 此时结果确定为16
内容的提问来源于stack exchange,提问作者bestgamer14
相关产品推荐
相关产品推荐

