今日、興味深いことを学びました: 標準ベクトル v があり、次のようなコードを実行した場合:
std::vector<float> v;
for (int i = 0; i < 2; i++) v.push_back(2.);
を呼び出しても、境界チェックを行わないv[2]
ため、セグメンテーション違反は発生しません。operator[]
私はとてつもなく小さな数を取得していましたが、push_back のデフォルトの動作とは何か、ベクトル境界のオーバーフローから何を期待すべきかについて興味がありました。次のフロートだけでなく、より多くのスペースを割り当てる必要があると思います。いくら?これは標準ですか、それともコンパイラ固有ですか?