隨筆-204  評論-149  文章-0  trackbacks-0
          關于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 閱讀(523) 評論(0)  編輯  收藏 所屬分類: C++編程
          主站蜘蛛池模板: 屏边| 松江区| 大城县| 织金县| 江西省| 桃源县| 都匀市| 东光县| 手机| 泰兴市| 册亨县| 个旧市| 辽中县| 枝江市| 赤壁市| 绥棱县| 和田县| 太谷县| 郁南县| 工布江达县| 务川| 大洼县| 遵义县| 承德县| 九龙城区| 富蕴县| 高密市| 平度市| 新巴尔虎右旗| 赫章县| 修文县| 泊头市| 行唐县| 陆河县| 民乐县| 布尔津县| 哈尔滨市| 克拉玛依市| 洱源县| 乌鲁木齐市| 江孜县|