は、テンプレート引数が変更されているので、明らかに、この場合には作業をdoesntの静的キャスト安全constポインタのベクトルへのポインタのベクトルからの再解釈は安全ですか?
vector<int*> a;
const vector<const int*>& b = reinterpret_cast<const vector<const int*>&>(a);
この変換タイプです。しかし、この再解釈キャストを行うことによって、私は本質的に同じタイプのconstnessを追加するだけです。これはすべての実用的な目的のために安全であるべきですか?
現実的に間違っているかもしれない1つの方法(テストでこれを確認していませんが)は厳密なエイリアシングです。オプティマイザは、 'b'が' a'と同じメモリを参照していないと仮定することができます(これは、エイリアシングと互換性のない型を持つためです)。その後、オプティマイザはそのトリックを行い、 'a'や' b' *が有効に*同じメモリを参照していれば、順序を変更したり削除したりしないものを再注文または削除します。だから、同じレイアウトが必要ですが、それが "働く"ための十分な条件ではありません。 –
これを見るもう一つの方法は、参照やポインタ型への 'reinterpret_cast'の結果が*基本的には役に立たず、元の型に変換する以外には機能しません。オブジェクトの実際の型をエイリアシングするのに合法であるか、(b)実行している特定のことをサポートしているかどうかの特定の保証があります。いずれも適用されないときは、自分以外のタイプでオブジェクトを参照しないでください。そうすることは、「型打ち」とも呼ばれます。 –