Tue, 26 Jun 2012
std::mapに要素を加える時の話
Tweet
例えばstd::map<int, a>
に要素を加える時、
std::map<int, a> hoge; hoge.insert(std::pair<int, a>(0, a()));
とやると、クラスa
のコンストラクタは何回走るか?思いつくところで
pair
のコンストラクタの引数のコンストラクタpair
のメンバ変数のコピーコンストラクタmap
のメンバ変数のコピーコンストラクタ
の3回あるが(他にあったら教えてください)、実際にやってみると4回とか5回実行されたりする。じゃあ
hoge[0]
ならどうかというと、clang++ -stdlib=libstdc++
でコンパイルすると3回走るんだけど、clang++ -stdlib=libc++
でコンパイルすると1回だけしか走らない!libc++賢いね!!というお話でした。