あるインスタンスnがある。このインスタンスの真の型(動的な型)は問わないものとする。
- 反射律:nの静的な型がAであるならば、nをAにキャストできる。
- 対称律:nの静的な型がAであり、これをBにキャストできるならば、再度Aにキャストできる。
- 推移律:nの静的な型がAであり、これをBにキャストしてからCにキャストできるならば、直接AからCにキャストできる。
この特徴は、特にCOMのQueryInterfaceにおいて顕著である。
余談だが、COMのキャスト規則も書いておく。
- 反射律:nの静的な型がIFooであるならば、n->QueryInterface( IID_IFoo, &m ); は成功する。
- 対称律:nの静的な型がIFooであり、n->QueryInterface( IID_IBar, &m ); が成功するならば、m->QueryInterface( IID_IFoo, &o ); は成功する。
- 推移律:nの静的な型がIFooであり、n->QueryInterface( IID_IBar, &m ) が成功し、かつ m->QueryInterface( IID_IPoo, &o ); が成功するならば、n->QueryInterface( IID_IPoo, &o ); は成功する。
- nの型に関わらず、n->QueryInterface( IID_IUnknown, &m ); は常に成功する。
かつ、m の値は何度実行しても必ず同じになる(IUnknown 以外へのキャストの場合は同じになるとは限らない)。
- n->QueryInterface( IID_IFoo, &m ); が一度成功したならば、何度実行しても必ず成功する。
逆に、一度失敗したならば、何度実行しても必ず失敗する。