4

最近このコードに出くわしましたが、何が起こっているのかよくわかりません。

auto c = vector<int> {};

ベクトルコンストラクターは何を返しますか?

次に、このコード:

c = vector<int> {1,2,3,4,5 };

cは最初とは異なるメモリ位置にありcますか?

デストラクタcは再初期化時に呼び出されますか?

インターネットを検索しましたが、上記のコードの例は見つかりませんでした。

上記はどのように異なりますか

vector<int> c {};

助けてくれてありがとう。

4

5 に答える 5

5

「jrd1 が言うように、これは C++11 の機能です。

キーワードautoは基本的に、コンパイラに変数の型を「推測」させることを意味します。

cレギュラーもそうですvector<int>

于 2013-10-11T11:24:51.687 に答える
1

最初と最後の行は機能的に同等です。

割り当ての場合:

c = vector<int> {1,2,3,4,5 };

c は破棄されず、後で新しいメモリ操作に配置されません。名前のない 2 番目のベクトルが 5 つの値で作成され、vector::operator=そのベクトルの内容を c に割り当てるために使用されます。これは、C++11 での移動操作に関して発生します。その後、一時的なベクトルは破棄され、デストラクタが呼び出されますが、c のデストラクタではありません。

于 2013-10-11T11:31:49.830 に答える