青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天下

記錄修行的印記

[轉(zhuǎn)]深入解析c++靜態(tài)聯(lián)編和類(lèi)的成員函數(shù)調(diào)用

只要學(xué)了C++的人,肯定知道靜態(tài)聯(lián)編和動(dòng)態(tài)聯(lián)編,如果你不知道,ok那你學(xué)習(xí) 之路還長(zhǎng)。簡(jiǎn)單的靜態(tài)聯(lián)編的東西就不說(shuō)了。先看下面程序。

#include <iostream>
using namespace std;
class AA{
 
public:
     
void result()
       {
            std::cout 
<< "Surprise?" << std::endl;
       };
 };
int main()
{
    AA 
*= NULL; //注意這里是NULL
    p
->result();
    ((AA
*)0)->result();
    system(
"Pause");
    
return 0;
}


上面程序運(yùn)行會(huì)報(bào)錯(cuò)嗎?
——————————————————————

如果你說(shuō)運(yùn)行一切正常并知道原因,ok。那就別往下看了,時(shí)間就是金錢(qián)。

確實(shí),這個(gè)運(yùn)行正常并輸出  Surprise? 不信?你copy過(guò)去運(yùn)行下試試。為啥啊。明明指針p的值是NULL,而你使用NULL指針去調(diào)用成員函數(shù),明明會(huì)報(bào)內(nèi)存錯(cuò)誤的瑟。書(shū)上不是說(shuō)了不能使用 NULL指針嗎?嘿嘿,沒(méi)錯(cuò),確實(shí)不能使用NULL指針,但是這里,程序根本就沒(méi)有用指針p的值,而是僅僅用到了它的類(lèi)型做靜態(tài)束定而已。

要解此題首先要明確兩個(gè)問(wèn)題。

1、靜態(tài)聯(lián)編的原理;2、成員函數(shù)的代碼在運(yùn)行期只有一份拷貝。

靜態(tài)聯(lián)編簡(jiǎn)單的說(shuō)就是在編譯期就已經(jīng)確定了要調(diào)用哪個(gè)函數(shù)了,這里的result()就是。同時(shí)要知道,類(lèi)的成員函數(shù)在運(yùn)行期只有一份拷貝在內(nèi)存,不管類(lèi)的實(shí)例有多少個(gè),成員函數(shù)始終只有一份代碼在內(nèi)存,因此只要知道類(lèi)的指針的類(lèi)型之后,就可以定位到函數(shù)的入口地址,根本不關(guān)心該指針指向的是一個(gè)什么東西。成員函數(shù)和成員變量不一樣,非靜態(tài)成員變量是跟隨類(lèi)的實(shí)例走的。

ok,明白上面兩個(gè)問(wèn)題之后,這個(gè)事情就好解決了。直接上匯編吧。

匯編如下:

AA *p = NULL;
00411ACE  mov         dword ptr [p],0
p->result();
00411AD5  mov         ecx,dword ptr [p]
00411AD8  call          AA::result (41105Ah)

清楚了吧。在執(zhí)行p->result()的時(shí)候只是把p的值移動(dòng)到了一個(gè)暫存器里面,但是并沒(méi)有用到這個(gè)值,后面就直接調(diào)用AA::result函數(shù)了,0x41105A正是該函數(shù)的入口地址。

ok,好了。不僅可以向以上說(shuō)的去訪問(wèn)成員函數(shù),甚至再過(guò)分一點(diǎn)((A*)0)->result();這樣都可以。你再火一點(diǎn)把那個(gè)0換成任意一個(gè)地址都可以正確調(diào)用到那個(gè)函數(shù),因?yàn)榫幾g器在靜態(tài)束定的時(shí)候只關(guān)心那個(gè)指針的類(lèi)型。當(dāng)然了,不可這樣去訪問(wèn)類(lèi)的成員變量,因?yàn)槌蓡T變量是在對(duì)象的內(nèi)存布局里面的。

值得說(shuō)一點(diǎn)的是,如果你在result函數(shù)里面有涉及到類(lèi)的成員變量的訪問(wèn),那么這顯然就會(huì)出錯(cuò)了,因?yàn)槌蓡T變量需要通過(guò)傳進(jìn)來(lái)的this指針(其實(shí)就可以理解成時(shí)p指針)去訪問(wèn)對(duì)象的內(nèi)存的。然而此時(shí)p還沒(méi)有指向一個(gè)有效的空間。故而出錯(cuò)。


posted on 2010-10-26 12:02 天下 閱讀(1004) 評(píng)論(8)  編輯 收藏 引用 所屬分類(lèi): C/C++

評(píng)論

# re: 深入解析c++靜態(tài)聯(lián)編和類(lèi)的成員函數(shù)調(diào)用 2010-10-26 18:26 OwnWaterloo

請(qǐng)教一下, "靜態(tài)聯(lián)編"和"動(dòng)態(tài)聯(lián)編"這兩個(gè)術(shù)語(yǔ)的出處在哪?  回復(fù)  更多評(píng)論   

# re: 深入解析c++靜態(tài)聯(lián)編和類(lèi)的成員函數(shù)調(diào)用 2010-10-26 23:46 ...

這跟C++有什么關(guān)系? 內(nèi)存儲(chǔ)存機(jī)制都是這樣的。 你間接調(diào)用一個(gè)API 看看, 看看真正的API入口點(diǎn)是什么。

甚至再過(guò)分一點(diǎn)((A*)0)->result();這樣都可以。你再火一點(diǎn)把那個(gè)0換成任意一個(gè)地址都可以正確調(diào)用到那個(gè)函數(shù)

你在函數(shù)上面加個(gè)變量看看。  回復(fù)  更多評(píng)論   

# re: 深入解析c++靜態(tài)聯(lián)編和類(lèi)的成員函數(shù)調(diào)用 2010-10-27 09:14 天下

@OwnWaterloo
《深度探索C++對(duì)象模型》有詳細(xì)的解釋.
  回復(fù)  更多評(píng)論   

# re: 深入解析c++靜態(tài)聯(lián)編和類(lèi)的成員函數(shù)調(diào)用 2010-10-27 10:08 溪流

@天下
沒(méi)看出來(lái)質(zhì)疑的語(yǔ)氣嗎?
不過(guò)很多大學(xué)教科書(shū)確實(shí)也都這么叫。。。  回復(fù)  更多評(píng)論   

# re: 深入解析c++靜態(tài)聯(lián)編和類(lèi)的成員函數(shù)調(diào)用 2010-10-27 11:01 OwnWaterloo

@天下
能詳細(xì)說(shuō)說(shuō)是哪一章節(jié), 以及哪一版本嗎?
中文版至少有3個(gè)版本, 侯捷的簡(jiǎn)體與繁體、 還有另一個(gè)人翻譯的簡(jiǎn)體。
再次感謝~


@溪流
我最開(kāi)始是聽(tīng)一個(gè)學(xué)弟在論壇上這么說(shuō), 以為是他自己造的一個(gè)詞。
后來(lái)偶爾也有文章出現(xiàn)這樣的詞。
今個(gè)兒終于逮到機(jī)會(huì)問(wèn)問(wèn)。
是哪本大學(xué)教科書(shū)啊?  回復(fù)  更多評(píng)論   

# re: 深入解析c++靜態(tài)聯(lián)編和類(lèi)的成員函數(shù)調(diào)用 2010-10-27 16:27 天下

@OwnWaterloo
@OwnWaterloo
@溪流

大學(xué)里教過(guò),很多書(shū)里面也有講.
但是,
不好意思,文章是轉(zhuǎn)的.,可能記錯(cuò)了,不記得是哪本書(shū)里講過(guò).
  回復(fù)  更多評(píng)論   

# re: [轉(zhuǎn)]深入解析c++靜態(tài)聯(lián)編和類(lèi)的成員函數(shù)調(diào)用[未登錄](méi) 2010-10-27 23:25 OwnWaterloo

@天下
I see. 謝謝~  回復(fù)  更多評(píng)論   

# re: [轉(zhuǎn)]深入解析c++靜態(tài)聯(lián)編和類(lèi)的成員函數(shù)調(diào)用 2010-10-28 02:16 溪流

@OwnWaterloo
我手上有一本科學(xué)出版社《Visual C++ 程序設(shè)計(jì)基礎(chǔ)》,大一時(shí)候一門(mén)課用的  回復(fù)  更多評(píng)論   

<2016年1月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(4)

隨筆分類(lèi)(378)

隨筆檔案(329)

鏈接

最新隨筆

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩一区二区高清| 欧美日韩理论| 久久久www免费人成黑人精品 | 99成人在线| 一区二区在线视频| 黄色成人91| 亚洲第一精品影视| 一区二区三区在线看| 国产欧美一区二区精品性色| 欧美日韩一区自拍| 国产精品久久久久9999| 国产一区二区激情| 亚洲麻豆av| 亚洲在线观看视频| 一区二区91| 亚洲男人第一av网站| 亚洲精品欧美日韩专区| 99国产精品自拍| 小处雏高清一区二区三区| 欧美在线视频免费播放| 久久久欧美一区二区| 欧美高清在线| 国产欧美日本一区二区三区| 国产区亚洲区欧美区| 亚洲日本免费电影| 亚洲欧美视频一区二区三区| 久久野战av| 亚洲女女女同性video| 久久婷婷久久一区二区三区| 国产精品久久久久久妇女6080| 国产三级欧美三级日产三级99| 亚洲大胆av| 午夜精品一区二区三区在线视 | 欧美亚一区二区| 亚洲高清视频一区| 久久久久成人网| 亚洲午夜电影在线观看| 免费成人毛片| 狠色狠色综合久久| 久久精品在线| 久久久久久网| 尤物yw午夜国产精品视频明星 | 欧美日韩美女在线观看| 国产日韩欧美电影在线观看| 久久综合久久综合久久综合| 国产精品亚洲аv天堂网| 欧美亚洲视频在线看网址| 日韩一级不卡| 国产精品久久国产精麻豆99网站| 亚洲少妇在线| 欧美在线视频一区二区三区| 国产免费一区二区三区香蕉精| 亚洲欧美日韩一区二区三区在线观看| 在线中文字幕日韩| 黄色精品一区| 最近看过的日韩成人| 久久躁日日躁aaaaxxxx| 亚洲人成网站精品片在线观看| 亚洲国产天堂网精品网站| 欧美性猛交99久久久久99按摩| 午夜精品一区二区三区在线视 | 亚洲自拍偷拍网址| 亚洲欧美日韩精品综合在线观看| 国产亚洲精品aa午夜观看| 欧美福利专区| 国产美女精品| 一区二区高清在线| 在线成人av| 欧美在线观看视频| 欧美在线播放一区| 欧美日韩理论| 亚洲国产二区| 在线观看欧美日韩国产| 亚洲无限av看| 亚洲男人影院| 欧美精品乱码久久久久久按摩| 麻豆成人在线播放| 在线精品国精品国产尤物884a| 欧美亚洲一级| 一本色道久久综合狠狠躁的推荐| 欧美午夜视频一区二区| 欧美激情一区二区三区四区| 国产日韩欧美高清免费| 亚洲欧美一区二区精品久久久| 午夜精品国产更新| 久久精品国产欧美亚洲人人爽| 久久亚洲美女| 欧美福利视频网站| 亚洲精品久久7777| 久久岛国电影| 久久久久久97三级| 蘑菇福利视频一区播放| 欧美精品aa| 亚洲自拍电影| 亚洲国产精品va在线观看黑人| 亚洲毛片一区| 一区二区欧美日韩视频| 欧美日韩国语| 久久亚裔精品欧美| 浪潮色综合久久天堂| 亚洲天堂免费在线观看视频| 欧美成人精品三级在线观看| 久久高清一区| 欧美在线观看视频一区二区| 99精品视频一区| 91久久精品网| 黄色一区二区在线| 国产欧美日韩高清| 欧美日韩国产二区| 久久国产福利| 在线一区亚洲| 91久久国产自产拍夜夜嗨| 久久男人资源视频| 久久久女女女女999久久| 亚洲欧美日韩在线不卡| 一区二区三区四区精品| 一本大道久久a久久综合婷婷 | 国产精品一区二区男女羞羞无遮挡 | 国产午夜精品久久久| 欧美成人自拍视频| 国产精品分类| 国产精品欧美精品| 国产亚洲永久域名| 国产日韩精品一区| 国产视频一区欧美| 国产综合欧美| 亚洲高清不卡| 在线亚洲伦理| 美女性感视频久久久| 欧美成人精品激情在线观看| 男女视频一区二区| 亚洲视频高清| 久久香蕉国产线看观看av| 久久一本综合频道| 国产精品一区三区| 国产小视频国产精品| 1204国产成人精品视频| 久久国产99| 久久久久久九九九九| 久久久久久噜噜噜久久久精品 | 老色批av在线精品| 精品99视频| 欧美大片va欧美在线播放| 久久在线精品| 夜夜狂射影院欧美极品| 日韩一二三区视频| 国产日韩欧美一区二区三区四区 | 午夜精品久久久久久久久久久久久 | 国产精品美女在线| 欧美在线短视频| 欧美sm视频| 久久久中精品2020中文| 欧美三级第一页| 一区二区三区波多野结衣在线观看| 久久精品一区| 欧美在线亚洲在线| 永久免费毛片在线播放不卡| 久久人人九九| 免费亚洲一区| 99在线精品观看| 亚洲一区二区四区| 伊人伊人伊人久久| 99re66热这里只有精品3直播 | 香蕉久久夜色精品国产| 亚洲乱码国产乱码精品精98午夜| 免费在线成人| 亚洲在线视频| 久久综合国产精品| 亚洲美女毛片| 久久国产毛片| 亚洲人成网站精品片在线观看| 日韩视频一区二区三区在线播放| 欧美日韩另类国产亚洲欧美一级| 性色av一区二区三区红粉影视| 夜夜嗨av一区二区三区中文字幕 | 免费成人毛片| 亚洲图片欧洲图片日韩av| 午夜免费在线观看精品视频| 在线观看亚洲视频| 亚洲蜜桃精久久久久久久| 国产亚洲毛片| 一本色道久久加勒比精品| 亚洲精品久久久久久久久久久 | 国产日本精品| 一区二区三区久久精品| 亚洲在线一区二区三区| 欧美日韩国产一区| 亚洲精品九九| 国产精品久久99| 国产欧美激情| 国产精品视频你懂的| 亚洲毛片在线看| 久久嫩草精品久久久精品| 一区二区三区国产盗摄| 亚洲国产精品成人综合| 欧美性猛交视频| 亚洲免费在线观看| 欧美一区在线视频| 99re热精品| 亚洲人成人77777线观看|