vector<int> v;
v.push_back(1);
v.push_back(v[0]);
2 回目の push_back によって再割り当てが発生すると、ベクター内の最初の整数への参照は有効ではなくなります。これは安全ではないのでしょうか?
vector<int> v;
v.push_back(1);
v.reserve(v.size() + 1);
v.push_back(v[0]);
これで安全になりますか?
ベストアンサー1
それは次のようになりますhttp://www.open-std.org/jtc1/sc22/wg21/docs/lwg-closed.html#526この問題 (またはそれに非常に類似した問題) を標準の潜在的な欠陥として対処しました。
1) const参照によって取得されるパラメータは関数の実行中に変更される可能性がある
例:
std::vector v が与えられた場合:
v.insert(v.begin(), v[2]);
v[2]はベクトルの要素を移動することで変化できる
提案された解決策は、これは欠陥ではないというものでした。
標準では動作しないことが許可されていないため、vector::insert(iter, value) が動作する必要があります。