const_cast
を使用してconst
を非const
にキャストできることを知っています。
しかし、非const
をconst
にキャストしたい場合は何を使うべきでしょうか?
const_cast
は、削除するために使用できますまたはオブジェクトにconstnessを追加します。これは、特定のオーバーロードを呼び出す場合に役立ちます。
考案された例:
class foo {
int i;
public:
foo(int i) : i(i) { }
int bar() const {
return i;
}
int bar() { // not const
i++;
return const_cast<const foo*>(this)->bar();
}
};
C++ 17以降のSTLはstd::as_const
まさにこの場合。
参照: http://en.cppreference.com/w/cpp/utility/as_const
つかいます:
CallFunc( as_const(variable) );
の代わりに:
CallFunc( const_cast<const decltype(variable)>(variable) );
必要に応じてconst_cast
を使用できますが、実際には必要ありません。非constは暗黙的にconstに変換できます。
Constパラメーターを持つ関数に非const引数を渡すと、暗黙的な変換が行われます