SO C++ FAQ を参照するstatic_cast、dynamic_cast、および reinterpret_cast はいつ使用する必要がありますか? .
const_cast は、変数に const を削除または追加するために使用され、constness を削除する唯一の信頼できる定義済みの合法的な方法です。reinterpret_cast は、型の解釈を変更するために使用されます。
const_cast のみを使用して const 変数を非 const にキャストする必要がある理由を合理的な方法で理解していますが、const_cast の代わりに reinterpret_cast を使用して constness を追加する問題の合理的な正当化を理解できません。
constness を追加するために reinterpret_cast を使用することは正気ではないことを理解していますが、constness を追加するために reinterpret_cast を使用することは、UB または潜在的な時限爆弾になるのでしょうか?
ここで私が混乱した理由は、ステートメントのためです
ほとんどの場合、reinterpret_cast で得られる唯一の保証は、結果を元の型にキャストした場合にまったく同じ値が得られるということです。
したがって、reinterpret_cast を使用して constness を追加し、結果を元の型に reinterpret_cast すると、結果は元の型に戻り、UB になるべきではありませんが、const_cast のみを使用して constness を削除する必要があるという事実に違反しています。
別の注意事項として、標準では、ケースの再解釈を使用して Constness を追加できることが保証されています。
5.2.10 キャストの再解釈 (7) ......「T1 へのポインター」型の prvalue v を「cv T2 へのポインター」型に変換すると、結果は static_cast(static_cast(v)) になります。および T2 は標準レイアウト タイプ (3.9) であり、T2 の配置要件は T1 の配置要件よりも厳密ではありません。