Skip to content

Instantly share code, notes, and snippets.

@abcsharp
abcsharp / gist:1335313
Created November 2, 2011 23:39
某C++入門書のstd::mapの使用例として載っている間違ったコード
/*
以下のコードではmapのキーとしてchar*が使われているが、
ポインタ型の比較は持っているアドレスが等しいかどうかで判断するので、意図した動作はしない。
この場合正しくはstd::stringを使うべき。
しかし、この入門書ではVisual C++で開発している前提なので、動きが異なってくる。
理由は「文字列プール」という等価な文字列リテラルは全て同一の実体として
(要するにコード中に"A"というリテラルが複数あった場合、それらのアドレス全て同じになる)
扱うように最適化する機能が有効になっている為に、当初意図していた通りに動作してしまう。