int main() {
int a = 10;
int b = a * a++;
printf("%i %i", a, b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以上代码的输出是否未定义行为?
没有
int b = a * a++;
Run Code Online (Sandbox Code Playgroud)
行为是未定义的,因此结果可以是任何东西 - 这不是"依赖于实现"的含义.
你可能想知道为什么它在UB这里a只修改了一次.原因是标准的5/4段中还要求只能访问先前值以确定要存储的值.a只应读取以确定新值a,但这里a读取两次 - 一次计算第一个乘数,再次计算结果a++具有写入新值的副作用a.所以即使a在这里修改一次,它也是未定义的行为.
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |