Re: [問題] 為什麼兩個 pointer 不能轉 const
來段程式好了
這個問題要分成內建type和自定義class
這兩個會有不同的結果
由於要讓違法的語法compile過,所以加上-fpermissive這個flag
<狀況一: 自定義class>
class aaa
{
public:
void modify(int s){i=s;}
void print()const{cout<<i<<endl;}
private:
int i=1;
};
int main()
{
aaa const** aq; //老大
aaa* ap; //老二
const aaa ax; //老三
aq = ≈ //這是被禁止的,但是加上-fpermissive暫時編譯過
*aq = &ax; //由於*aq=ap,所以ap指向ax
ap->modify(5566); //ax.i變成5566 !!! 執行期沒有掛
ax.print();
}
<狀況二: 內建type>
int const** q;
int* p;
const int x=1;
q = &p;
*q = &x;
*p=5566; //x還是1並沒變5566,執行期沒有掛
<結論>
1.基於安全考量所以int **不能轉成int const ** (可以參考上篇po文)
2.自定義class的const物件用走漏洞的方式可以更改
3.內建type的const變數用走漏洞的方式改不動,我不知道為什麼,有請高手解釋
4.執行期都不會掛,執行期應該不會去檢查,這會影響效率
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.240.10
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1423407806.A.ADF.html
※ 編輯: RealJack (114.25.240.10), 02/08/2015 23:05:09
※ 編輯: RealJack (114.25.240.10), 02/08/2015 23:08:27
推
02/09 00:08, , 1F
02/09 00:08, 1F
→
02/09 00:09, , 2F
02/09 00:09, 2F
→
02/09 00:10, , 3F
02/09 00:10, 3F
→
02/09 00:10, , 4F
02/09 00:10, 4F
→
02/09 15:04, , 5F
02/09 15:04, 5F
→
02/09 15:05, , 6F
02/09 15:05, 6F
→
02/09 15:06, , 7F
02/09 15:06, 7F
→
02/09 15:07, , 8F
02/09 15:07, 8F
→
02/09 15:07, , 9F
02/09 15:07, 9F
→
02/09 15:08, , 10F
02/09 15:08, 10F
推
02/09 15:36, , 11F
02/09 15:36, 11F
→
02/09 15:37, , 12F
02/09 15:37, 12F
→
02/09 15:38, , 13F
02/09 15:38, 13F
→
02/09 15:38, , 14F
02/09 15:38, 14F
→
02/09 15:42, , 15F
02/09 15:42, 15F
→
02/09 15:43, , 16F
02/09 15:43, 16F
→
02/09 15:55, , 17F
02/09 15:55, 17F
→
02/09 15:56, , 18F
02/09 15:56, 18F
推
02/09 18:12, , 19F
02/09 18:12, 19F
→
02/09 18:24, , 20F
02/09 18:24, 20F
→
02/09 18:25, , 21F
02/09 18:25, 21F
推
02/09 18:30, , 22F
02/09 18:30, 22F

→
02/09 18:30, , 23F
02/09 18:30, 23F
→
02/09 18:31, , 24F
02/09 18:31, 24F
推
02/10 09:53, , 25F
02/10 09:53, 25F
→
02/10 09:55, , 26F
02/10 09:55, 26F
→
02/10 10:07, , 27F
02/10 10:07, 27F
→
02/10 10:09, , 28F
02/10 10:09, 28F
→
02/10 10:16, , 29F
02/10 10:16, 29F
→
02/10 10:17, , 30F
02/10 10:17, 30F
→
02/10 10:25, , 31F
02/10 10:25, 31F
→
02/10 10:40, , 32F
02/10 10:40, 32F
→
02/10 10:41, , 33F
02/10 10:41, 33F
→
02/10 10:42, , 34F
02/10 10:42, 34F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 4 篇):