Yve*_*ves 1 c++ side-effects undefined-behavior sequence-points
想象一下,我们有以下代码:
int i = 1;
int j = i++ + ++i;
Run Code Online (Sandbox Code Playgroud)
我知道这是一个未定义的行为,因为在分号之前,它是一个序列点,的值i已经改变了不止一次。这意味着即使运算符 plus 的优先级是从左到右,编译器也可能有两种可能性:
情况1)
i++--- 的值为i1++i--- 的值为i2j并执行副作用i++(此步骤的顺序也未定义,但我们不在乎,因为它不会改变结果)情况 2)
i++--- 的值为i1i++---的副作用i是 2++i---当前值为i3j如果这里没有问题,我有一个问题:
int j = ++i + i++;
上面的代码仍然是未定义的行为吗?
在我看来,只有一种可能:
++i---的副作用i是 2i++--- 的值为i2j并执行副作用i++(此步骤的顺序也未定义,但我们不在乎,因为它不会改变结果)我对吗?
顺便说一句,我已阅读此链接:
未定义的行为和序列点
int j = ++i + i++;
Run Code Online (Sandbox Code Playgroud)
仍然是未定义的行为,因为++i它i++可以在某些 CPU 的多个管道中同时处理,这将导致不可预测的结果。
| 归档时间: |
|
| 查看次数: |
1962 次 |
| 最近记录: |