const_cast vs static_cast
-
25-09-2019 - |
質問
追加 const
に非定数オブジェクトの推奨方法は? const_cast<T>
または static_cast<T>
.最近の問題は、誰がいりませんので、予めご static_cast
, がいるとは思って const_cast
ということは、意図のもとにコードがより鮮明になります。その引数の使用 static_cast
を変数にconst?
解決
のいずれかを使用しないでください。
:オブジェクトを参照const参照を初期化しますT x;
const T& xref(x);
x.f(); // calls non-const overload
xref.f(); // calls const overload
あるいは、ブーストで提供 1のように、implicit_cast
関数テンプレートを使用のます:
T x;
x.f(); // calls non-const overload
implicit_cast<const T&>(x).f(); // calls const overload
static_cast
とconst_cast
の間の選択を考えると、static_cast
は間違いなく好ましい。それはそうすることができる唯一のキャストで、const性を離れてキャストすることは本質的に危険であるため、const_cast
は、のに使用されるべきでは離れてのconst性を唱えます。 const性が未定義の動作をもたらす可能性が離れてキャストすることによって得られたポインタまたは参照を介してオブジェクトを修正する
他のヒント
私はそれだけで(必ずしも安全ではありません)、そしてない他の方向で(安全である)static_cast
非const
からのキャストにあなたをできるようになりますので、const
が望ましいと思います。
本利用の場合、 implicit_cast 機能テンプレートを作成します。
あなたがあなた自身のキャストを書くことができます:
template<class T>
const T & MakeConst(const T & inValue)
{
return inValue;
}
所属していません StackOverflow