8

次のコードはUBを呼び出しますか?

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

2 に答える 2

9

はい-++iまたは*p(i)のいずれかを最初に評価できます。

于 2010-01-15T13:43:41.983 に答える
6

はい、2番目のルールに違反しようとしているため、これは未定義動作です。

規格は次のように述べています

1)前のシーケンスポイントと次のシーケンスポイントの間で、オブジェクトは、式の評価によって、格納されている値を最大1回変更する必要があります。

2)さらに、前の値は、保存される値を決定するためにのみアクセスされるものとします

:演算子のオペランドの評価順序*指定され*pておらず、に過ぎませんi

于 2010-01-15T13:48:01.180 に答える