const_cast 演算子
クラスから 定数 volatile と __unaligned の属性を削除します。
const_cast < type-id > ( expression )
解説
どのオブジェクト型へのポインターまたはデータ メンバーへのポインターには 定数 volatile と __unaligned の修飾子を除いて同一でない型に明示的に変換できます。ポインターと参照の場合結果は元のオブジェクトを示します。データ メンバーへのポインターの場合結果は元の (uncast のポインターとデータ メンバーに同じメンバーを示します。参照されるオブジェクトの種類に応じて書き込み操作のポインターを使用してデータ メンバーへの参照ポインターは未定義の動作が発生することがあります。
直接設定した変数に設定した状態をオーバーライドするために 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 の演算子は CCTest * に this のデータ型を変更し変更されたことを number メンバーができます。キャストはステートメントの残りの部分に対してのみ保持されます。