1. 程式人生 > >const_cast的真正用途 (以前部落格的內容)

const_cast的真正用途 (以前部落格的內容)

不廢話,貼程式碼。如果如下所示,最後a的結果是12,如果定義的時候把a定義為int a,就列印12.

C++ primer 原話是“如果常量本身不是常量,獲得的許可權是合法的, 如果本身是常量,使用const_cast再寫的後果是未定義的。”

所以如果單純int a,是好理解的,就是達到了我們的目的。如果a本身就是const,就是那塊記憶體被定義為const的話,這樣的結果是未定義的,在我的編譯器和機器上,這個被定義為無法改變,可是在其他機器上,就不一定了。

所以,const_cast的目的並不是為了讓你去修改一個本身被定義為const的值,因為這樣做的後果是無法預期的。const_cast的目的是修改一些指標/引用的許可權,如果我們原本無法通過這些指標/引用修改某塊記憶體的值,現在你可以了。

#include<iostream>

using namespace std;

int main(int argc, char const *argv[]) 
{
const int a = 12;
const int *ap = &a;
int* tmp = const_cast<int*>(ap);
*tmp = 11;
cout<<a;
}