C++提供了4個轉換運算符:
? const_cast <new_type> (expression)
? static_cast <new_type> (expression)
? reinterpret_cast <new_type> (expression)
? dynamic_cast <new_type> (expression)
它們有著相同的結構,看起來像是模板方法。這些方法就是提供給開發者用來進行指針和援用的轉換的。
1、用法
const_cast<type_id> (expression)
該運算符用來修改類型的const或volatile屬性。除const 或volatile修飾以外, type_id和expression的類型是1樣的。
1 常量指針被轉化成非常量的指針,并且依然指向原來的對象;
2 常量援用被轉換成非常量的援用,并且依然指向原來的對象;
2、案例
class B
{
public:
B() { }
public:
int m_iNum;
};
void foo()
{
const B b1;
//b1.m_iNum = 100; //compile error
// 可以做以下轉換,體現出轉換為指針類型
B *b2 = const_cast<B*>(&b1);
// 或左邊也能夠用援用類型,如果對b2或b3的數據成員做改變,就是對b1的值在做改變
B &b3 = const_cast<B&>(b1);
b2->m_iNum = 200; //fine
b3.m_iNum = 300; //fine
}
int main( int argc, char * argv[] )
{
foo();
return 0;
}
上面代碼可運行,不會報錯,毛病代碼已注釋。去掉下面代碼行的注釋號后會報錯,由于b1之不可修改。
使用const_cast可以返回1個指向非常量的指針(或援用)指向b1,就能夠通過該指針(或援用)對它的數據成員任意改變。