Nullポインターをチェックする癖から、私は時々書いています:
MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0;
if (c) {...
実際には、動的キャストに渡す前にnullポインターをチェックし、戻り値もチェックします。
その後、MSDNドキュメントを読みます
Nullポインター値は、dynamic_castによって宛先の型のnullポインター値に変換されます。
そのとき、私は?:構成を安全に削除できたようです。これはC++ですかportable?
新しいコードは
MyClass * c = dynamic_cast<MyClass*>(someBasePtr);
if (c) {...
もちろんsomeBasePtrがnullまたは有効であること、つまりwildがゴミを指しているとは想定していません...
§5.2.7/ 4:
ポインターの場合、vの値がNULLポインター値である場合、結果はタイプRのNULLポインター値です。
したがって、ヌルポインターを自分で確認する必要はありません。同じことが演算子の削除にも当てはまり、nullポインタを削除しても効果はありません。
はい、dynamic_cast
nullポインター。
はい、標準で5.2.7.4を確認してください。