NRVO in VC++

どっちの option も非推奨な option "/Og" が暗黙的に指定されるという指摘があったのでちょっと修正。英語版を覗いてみると「非推奨」にあたるところが "deplicated" と書かれていたので後方互換のために残してあるだけで将来なくなりますよという意味での「非推奨」らしい。てかマジで Microsoft 社は localization ちゃんとしろ。

http://d.hatena.ne.jp/janus_wel/20100222/1266854346 で言ってた NRVO だけど VC++ でも特定の最適化 option を指定すると有効になるみたい。とりあえず以下の option が対象らしい。

というわけで http://d.hatena.ne.jp/janus_wel/20100222/1266854346 で提示してた source を cl.exe /EHsc /O2 /DWIN32 main.cpp としてできた main.exe を実行すると以下のようになった。確かに NRVO が効いてる。

RVO
Foo::Foo(void)

NRVO
Foo::Foo(void)

binding temporary object by const reference
Foo::Foo(void)

binding named temporary object const reference
Foo::Foo(void)