6

この行はC++標準でカバーされていないと主張する人がいました:

int i(1);
array_of_int[i] = i++;

その人はそれが割り当てられると言ったが、それがにあるのか、それともビジュアルスタジオとほとんどのコンパイラがにあるの1かはわからない。array_of_int[1]array_of_int[2]array_of_int[1]

彼は正しいですか?

4

1 に答える 1

6

これは未定義の動作です。文字通り、いかなる行動も合法です。

そのコード行を禁止する箇所は次のとおりです。

前のシーケンスポイントと次のシーケンスポイントの間で、オブジェクトは、式の評価によって、格納されている値を最大で1回変更する必要があります。さらに、前の値は、保存される値を決定するためにのみ読み取られるものとします。

a[i]との間にシーケンスポイントはなくi++、read to iinは、によってa[i]格納されている値を決定するためのものではありません。ii++

于 2012-08-30T19:04:14.727 に答える