const
非constオブジェクトに追加するには、どちらが推奨される方法ですか?const_cast<T>
またはstatic_cast<T>
。最近の質問で、誰かが使用することを好むと述べましたが、それによってコードの意図がより明確になるstatic_cast
と思いました。では、変数constを作成するconst_cast
ために使用するための引数は何ですか?static_cast
9051 次
4 に答える
17
どちらも使用しないでください。オブジェクトを参照するconst参照を初期化します。
T x;
const T& xref(x);
x.f(); // calls non-const overload
xref.f(); // calls const overload
または、Boostで提供されて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_cast
のみ使用する必要があります。constnessをキャストして取得したポインタまたは参照を介してオブジェクトを変更すると、未定義の動作が発生する可能性があります。
于 2010-08-04T03:15:46.800 に答える
3
static_cast
非const
からconst
(安全)へのキャストのみが可能であり、他の方向(必ずしも安全ではない)へのキャストはできないため、望ましいと思います。
于 2010-08-04T03:16:47.170 に答える
2
これは、 implicit_cast関数テンプレートの良いユースケースです。
于 2010-08-04T03:20:16.383 に答える
1
あなたはあなた自身のキャストを書くことができます:
template<class T>
const T & MakeConst(const T & inValue)
{
return inValue;
}
于 2010-08-04T08:47:15.843 に答える