21

C++標準[秒5.7]は次のように述べています。

ポインタオペランドと結果の両方が同じ配列オブジェクトの要素を指している場合、または配列オブジェクトの最後の要素を1つ過ぎている場合、評価によってオーバーフローが発生することはありません。それ以外の場合、動作は定義されていません。

それで、配列以外のタイプのポインタが未定義であると仮定するのは正しいですか?

例えば:

int a = 0;
vector<int> v(&a, (&a)+1);

上記のスニペットはコンパイルされ、(g ++で)問題なく動作しますが、それは有効ですか?

4

1 に答える 1

27

いいえ、合法です。5.7(4)-引用符の1段落前-は次のように述べています。「これらの演算子の目的上、非配列オブジェクトへのポインターは、オブジェクトのタイプが次のような長さ1の配列の最初の要素へのポインターと同じように動作します。その要素タイプ。」

于 2013-01-24T16:20:08.113 に答える