以下代码是否调用UB?

时间:2010-01-15 13:41:38

标签: c++ undefined-behavior

以下代码是否会调用UB?

int main(){
  volatile int i = 0;
  volatile int* p = &i;
  int j = ++i * *p;
}

2 个答案:

答案 0 :(得分:9)

是 - 可以先评估++ i或* p(即i)。

答案 1 :(得分:6)

未定义的行为,因为您试图违反第二条规则..

  

标准规定

     

1)在前一个和下一个序列点之间,一个对象的存储值最多只能通过表达式的计算修改一次。

     

2)此外,只能访问先前值以确定要存储的值

注意*运算符的操作数评估顺序为未指定*p只是i