const_cast 演算子

constvolatile、および __unaligned 属性をクラスから削除します。

構文

const_cast <type-id> (expression)

解説

オブジェクト型へのポインターまたはデータ メンバーへのポインターであれば、constvolatile、および __unaligned 修飾子を除いて同一の型に明示的に変換できます。 ポインターと参照の場合、結果は元のオブジェクトを参照します。 データ メンバーへのポインターの場合、結果は元の (キャストされていない) ポインターが指していたデータ メンバーと同じメンバーを参照します。 参照されるオブジェクトの型によっては、結果のポインター、参照、またはデータ メンバーへのポインターを通じた書き込み操作で未定義の動作が発生する可能性があります。

const_cast 演算子を使用して定数変数の一定した状態を直接オーバーライドすることはできません。

const_cast 演算子は、null ポインター値を変換先の型の null ポインター値に変換します。

// expre_const_cast_Operator.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class CCTest {
public:
   void setNumber( int );
   void printNumber() const;
private:
   int number;
};

void CCTest::setNumber( int num ) { number = num; }

void CCTest::printNumber() const {
   cout << "\nBefore: " << number;
   const_cast< CCTest * >( this )->number--;
   cout << "\nAfter: " << number;
}

int main() {
   CCTest X;
   X.setNumber( 8 );
   X.printNumber();
}

const_cast を含む行で、this ポインターのデータ型は const CCTest * です。 const_cast 演算子は、this ポインターのデータ型を CCTest * に変更して、メンバー number を修正できるようにしています。 キャストは、そのキャストが発生したステートメントの残り時間の間だけ持続します。

関連項目

キャスト演算子
キーワード