隨筆-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 閱讀(527) 評論(0)  編輯  收藏 所屬分類: C++編程
          主站蜘蛛池模板: 剑川县| 荥阳市| 乐山市| 灵武市| 叙永县| 永修县| 枝江市| 介休市| 龙川县| 钦州市| 邮箱| 文安县| 临沂市| 孝昌县| 江山市| 夏邑县| 扎赉特旗| 威宁| 富宁县| 黄冈市| 黎城县| 广元市| 常熟市| 大同县| 平顶山市| 资溪县| 改则县| 扎兰屯市| 盐津县| 石城县| 普定县| 乌海市| 梁山县| 治多县| 临猗县| 满洲里市| 东明县| 铜陵市| 郧西县| 遂平县| 马鞍山市|