このプログラム考えてみましょう:の15番目の要素にアクセスすることを求めたが、それは(私のシステムで出力0)していない場合、私はそれがクラッシュを期待するC++ベクトル奇妙な行動
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
vector<double> a;
while (a.size() <= 10)
a.push_back(2);
cout << a[15] << endl;
}
を。何がありますか? gccなどの新機能ですか?
クラッシュする可能性があります。それは未定義の振る舞いの美しさです。 – Mysticial
そのことを止めること..ベクトルは能力を伸ばすことができます!テストをすると、彼のベクトルには16という容量があることがわかります。これは[15]が有効であることを意味します! –
@riskio 'a [15]'は 'a.size()> 15 'の場合にのみ有効です。さもなければ、それは標準に従って、未定義の動作です。 (そして実際に、それはおそらく、デバッグビルドでクラッシュします。) –