私はマイクロ最適化code for identifying object typesです。私は、同じモジュールでインスタンス2つのオブジェクトが同じタイプを持っているかどうかをチェックするために、次を使用することができますと仮定します。等しいtype_infoアドレスは等しいタイプを意味しますか?
SomeCommonBase& first = ...;
SomeCommonBase& second = ...;
const type_info& firstInfo = typeid(first);
const type_info& secondInfo = typeid(second);
if(&firstInfo == &secondInfo || firstInfo == secondInfo) {
//identical types
} else {
//different types
}
ロジックはtype_info
参照が返されると、その参照の背後にあるオブジェクトがlive until the module is unloadedに保証されていることです。したがって、参照が返されると、他のオブジェクトは同じアドレスを占めることはできません。
したがって、アドレスが一致する場合は、一致するものはtype_info
オブジェクトと同じデータタイプです。インプリメンテーションが同じタイプの異なるtype_info
オブジェクトを返す場合は、type_info::operator==
が呼び出され、追加チェックが実行されます。
これは正しい仮定ですか?
私はVisual Studioがこれをあなたのためにすでに行っていると信じています。早すぎないように気をつけてください... –
@Bo Persson:私は慎重に測定して、あなたが正しいと思っています。違いは非常に小さく、関数呼び出しを保存するだけです。とにかく私はどこでもわずかなスピードアップができるように小さなコードを変更しても構いません。 – sharptooth