質問

追加 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_castconst_castの間の選択を考えると、static_castは間違いなく好ましい。それはそうすることができる唯一のキャストで、const性を離れてキャストすることは本質的に危険であるため、const_castは、のに使用されるべきでは離れてのconst性を唱えます。 const性が未定義の動作をもたらす可能性が離れてキャストすることによって得られたポインタまたは参照を介してオブジェクトを修正する

他のヒント

私はそれだけで(必ずしも安全ではありません)、そしてない他の方向で(安全である)static_castconstからのキャストにあなたをできるようになりますので、constが望ましいと思います。

本利用の場合、 implicit_cast 機能テンプレートを作成します。

あなたがあなた自身のキャストを書くことができます:

template<class T>
const T & MakeConst(const T & inValue)
{
    return inValue;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top