隨筆-204  評(píng)論-149  文章-0  trackbacks-0
          關(guān)于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;    //編譯能通過(guò),但是執(zhí)行就報(bào)錯(cuò)。

          : const char str[] = "abc";        abc存儲(chǔ)在堆棧中;
          : const char *str = "abc";         abc存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū);
          準(zhǔn)確的說(shuō),上面兩個(gè)“abc"都是存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū),即常量區(qū)。常量區(qū)是可讀不可寫(xiě)的。所以任何試圖對(duì)常量區(qū)進(jìn)行寫(xiě)的操作都是非法的,當(dāng)然了,這也不是一定不可寫(xiě)的,你可以采取某種渠道改變常量區(qū)的內(nèi)存屬性,比如改變pe相關(guān)節(jié)的屬性就可以對(duì)常量區(qū)進(jìn)行讀寫(xiě),當(dāng)然了,這個(gè)目前可以忽略。。。
          那么為什么str[] = "abc";        可以寫(xiě)呢?答案就在str[] = "abc";會(huì)有一個(gè)額外的拷貝過(guò)程,即把常量區(qū)的 "abc"拷貝到棧內(nèi)存去,所以就可以寫(xiě)了。
          posted on 2009-08-05 16:57 Frank_Fang 閱讀(527) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): C++編程
          主站蜘蛛池模板: 甘谷县| 五台县| 崇文区| 徐汇区| 卫辉市| 巨野县| 建始县| 林州市| 南江县| 锦州市| 桐城市| 郸城县| 于田县| 女性| 怀安县| 金门县| 通城县| 赫章县| 若羌县| 平安县| 聂拉木县| 万安县| 安溪县| 鄯善县| 九寨沟县| 香格里拉县| 忻城县| 砀山县| 中阳县| 本溪市| 翁源县| 神池县| 黄平县| 阿拉善盟| 西乌| 大庆市| 泰和县| 荣昌县| 连城县| 泌阳县| 新宁县|