関連する質問:組み込み型の std::map デフォルト値 -- 微妙な違いは、値が初期化されている0
かゴミであるかを知りたいということではなく、「コンストラクター」を指定したいということです。クラス定義にオーバーヘッドが伴うかどうかは気にしません。クリーンな「特別な」基本型が必要なだけです。構文ハックでさえできます。非基本型はこれを行うのが非常に簡単で、コンストラクターのすべての仕事です。
ハッシュマップを持ちたいのですunordered_map<void *, int>
が、そのすべての値をデフォルトで初期化して、-1
代わりに0
またはガベージにします。これは、ゼロが有効なインデックスであるためです。私は、明らかに無効な値でデフォルト初期化することを好みます。
これを行うには、いくつかのずさんな方法があると思います。
struct minus1 {
int i;
minus1() i(-1) {}
};
unordered_map<void*, minus1>
.i
しかし、intにアクセスするために使用する必要があり、実際にはintである必要があるため、これは好きではありません。
わかりましたので、マップにこれを処理させることができます:
struct PointerToIDHash {
std::unordered_map<void *, int> h;
PointerToIDHash() {
// ctor is powerless to affect the initialized values of future insertions into h
}
};
まあ、今は私も持ってい.h
ます。うーん。テンプレートから継承できますか? (恐ろしく聞こえるかもしれませんが、これを引き抜くことができれば、これはきれいな方法かもしれません)
int のように透過的に動作するが、常に に初期化される型を作成するにはどうすればよい-1
ですか?
C++ 11を使用する場合と使用しない場合の両方の方法を知りたいです。