c++為我們所提供的各種存取控制僅僅是在編譯階段給我們的限制,也就是說(shuō)是編譯器確保了你在完成任務(wù)之前的正確行為,如果你的行為不正確,那么你休想構(gòu)造出任何可執(zhí)行程序來(lái)。
H如果真正到了產(chǎn)生可執(zhí)行代碼階段,無(wú)論是c,ct+,還是pascal,大家都一樣,你認(rèn)為c和C++編譯器產(chǎn)生的機(jī)器代碼會(huì)有所不同嗎,你認(rèn)為c++產(chǎn)生的機(jī)器代碼會(huì)有訪問(wèn)限制嗎?
那么你錯(cuò)了。什么const,private,統(tǒng)統(tǒng)沒(méi)有(const變量或許會(huì)放入只讀數(shù)據(jù)段),它不會(huì)再給你任何的限制,你可以利用一切內(nèi)存修改工具或者是自己寫(xiě)一個(gè)程序?qū)δ骋贿M(jìn)程空間的某一變量進(jìn)行修改,不管它在你的印象中是private,還是public,對(duì)于此時(shí)的你來(lái)說(shuō)都一樣,想怎樣便怎樣.
另外,你也不要為c++所提供的什么晚期捆綁等機(jī)制大呼神奇,它也僅僅是在所產(chǎn)生的代碼中多加了幾條而已,它遠(yuǎn)沒(méi)有你想象的那么智能,所有的工作都是編譯器幫你完成,真正到了執(zhí)行的時(shí)候,計(jì)算機(jī)會(huì)完全按照編譯器產(chǎn)生的代碼一絲不茍的執(zhí)行。
(以下的反匯編代碼均來(lái)自visial c++ 7.0)
一.讓我們從變量開(kāi)始--并非你想象的那么簡(jiǎn)單