關于const_cast
const char str[] = "abc";
char * s = const_cast<char *>(str);
s[0] = 'A';
cout<<s<<endl; //輸出Abc
但是這樣就不行了:
const char *str = "abc";
char * s = const_cast<char *>(str);
s[0] = 'A';
cout<<s<<endl; //編譯能通過,但是執行就報錯。
: const char str[] = "abc"; abc存儲在堆棧中;
: const char *str = "abc"; abc存儲在靜態存儲區;
準確的說,上面兩個“abc"都是存儲在靜態存儲區,即常量區。常量區是可讀不可寫的。所以任何試圖對常量區進行寫的操作都是非法的,當然了,這也不是一定不可寫的,你可以采取某種渠道改變常量區的內存屬性,比如改變pe相關節的屬性就可以對常量區進行讀寫,當然了,這個目前可以忽略。。。
那么為什么str[] = "abc"; 可以寫呢?答案就在str[] = "abc";會有一個額外的拷貝過程,即把常量區的 "abc"拷貝到棧內存去,所以就可以寫了。
posted on 2009-08-05 16:57
Frank_Fang 閱讀(520)
評論(0) 編輯 收藏 所屬分類:
C++編程