web-dev-qa-db-ja.com

C ++で非constをconstにキャストする

const_castを使用してconstを非constにキャストできることを知っています。

しかし、非constconstにキャストしたい場合は何を使うべきでしょうか?

48
kamikaze_pilot

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(); 
    }
};
47
Motti

constnessを追加するためにconst_castは必要ありません:

class C;
C c;
C const& const_c = c;

詳細についてはこちらをお読みください 質問と回答 .

28
Ozair Kafray

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) );
27
Scott Langham

必要に応じてconst_castを使用できますが、実際には必要ありません。非constは暗黙的にconstに変換できます。

5
Jerry Coffin

Constパラメーターを持つ関数に非const引数を渡すと、暗黙的な変換が行われます

2
Guillaume07

const_castを使用して、constness動作を追加することもできます。

cplusplus.com から:

このタイプのキャストは、設定または削除されるオブジェクトの定数を操作します。

2
beduin