【发布时间】:2010-01-15 13:41:37
【问题描述】:
下面的代码会调用 UB 吗?
int main(){
volatile int i = 0;
volatile int* p = &i;
int j = ++i * *p;
}
【问题讨论】:
下面的代码会调用 UB 吗?
int main(){
volatile int i = 0;
volatile int* p = &i;
int j = ++i * *p;
}
【问题讨论】:
是的 - ++i 或 *p(即 i)可以首先被评估。
【讨论】:
是的,那是 未定义的行为,因为您试图违反第二条规则..
标准规定
1) 在前一个序列点和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。
2) 此外,只能访问先验值以确定要存储的值。
注意:* 运算符的操作数的求值顺序是未指定,*p 只不过是i。
【讨论】: