Posted on 2013-01-16 11:17
點點滴滴 閱讀(3619)
評論(0) 編輯 收藏 引用 所屬分類:
02 編程語言
案例1:
#include <iostream>
using namespace std;
int main()
{
const int a = 5;
const int * p = &a;
int *p_var = NULL;
p_var = const_cast <int*>(p); //強轉為非const指針
cout << a <<endl;
*p_var = 10; //重新賦值
cout << "*p=" << *p << endl; //輸出10
cout << "*p_var=" << *p_var << endl; //輸出10
cout << "a=" << a << endl; //輸出5
system("pause");
return 0;
}
以上代碼將const int*強轉為int*之后再賦值
為什么a的值沒有變還是5
而*p 與 *p_var都是10
*****************分析的分割線***************************************
const_cast用來丟棄
變量的const
聲明,但不能改變變量所指向的
對象的const
屬性。即:const_cast用于
原本非const的對象;如果用于
原本const的
對象,結果不可預知(C++語言未對此種情況進行規定)
清注意我上面用下劃線標示的“變量”vs“對象”
一般情況下const_cast是用于這種情形:const指針(變量)指向非const對象,程序員確認這一點(所指向的對象非const)時,使用const_cast操作符丟棄變量的const修飾獲得一個非const指針
看看《The C++ Programming language(special edition)》第15.4.2.1節的最后一段,仔細揣摩它的每個詞