kwkbtr’s log

Skip to main content | 本文へ

(Last modified on Tue, 26 Jun 2012 00:16 JST)

Tue, 26 Jun 2012

std::mapに要素を加える時の話 Clip to Evernote

例えばstd::map<int, a>に要素を加える時、

std::map<int, a> hoge;
hoge.insert(std::pair<int, a>(0, a()));

とやると、クラスaのコンストラクタは何回走るか?思いつくところで

  1. pairのコンストラクタの引数のコンストラクタ
  2. pairのメンバ変数のコピーコンストラクタ
  3. mapのメンバ変数のコピーコンストラクタ

の3回あるが(他にあったら教えてください)、実際にやってみると4回とか5回実行されたりする。じゃあ

hoge[0]

ならどうかというと、clang++ -stdlib=libstdc++でコンパイルすると3回走るんだけど、clang++ -stdlib=libc++でコンパイルすると1回だけしか走らない!libc++賢いね!!というお話でした。

Tags , | Comments on this entry

Thu, 21 Jul 2011

intのかけ算には気をつけよう Clip to Evernote

レアケースかもしれないし、当たり前の常識かもしれないが、ちょっとハマったので書き留めておく。

C/C++でintを使うとたいていは32ビットになるだろう。符号ビットがあるので実質31ビットで、log102が0.3ぐらいだから、十進では31×0.3=10桁くらいが最大値である。したがって103=1000ぐらいのintを4つかけ算するとオーバーフローしてしまう。(しかも全くエラーが出ない。)ちょっと大きめのintをちょっとたくさんかけるときはちゃんと大きい整数型にキャストしよう。(Googleはstdint.hで定義されているサイズが明示された整数型の使用を勧めている。)

Tags , , | Comments on this entry
© 2009 KAWAKUBO Toru <web (atmark) kwkbtr.info>

Archives

2013‑Mar 2012‑Jun 2011‑Jul 2010‑Nov 2010‑Oct 2010‑Sep 2010‑Mar 2010‑Jan 2009‑Dec 2009‑Oct 2009‑Sep 2009‑Aug

Latest entries RSS 2.0 Atom 1.0 My tweets | kwkbtr.info Entries in English

See also: Twitter Facebook Flickr Delicious FriendFeed (feeding “kwkbtr’s log,” Twitter, Flickr, Delicious and Last.fm) Nike+ Mendeley Last.fm Tumblr

kwkbtrの早起き生活グラフ Powered by 早起き生活

Made with PyBlosxom