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

兩段想當(dāng)然寫下的代碼,你看出問題了吧
1 class Data;
2 Data* FindData();
3 void GetData(Data* dataPtr)
4 {
5     dataPtr=FindData();
6 }
7 Data* data=NULL;
8 GetData(data);
9 data->somefunction();
第二段代碼,更得仔細(xì)點
 1 class A;
 2 class B;
 3 const * GetA();
 4 const * GetB();
 5 template<typename T>
 6 int GetSpecialValue(T* classPtr)
 7 {
 8    return  3721;
 9 }
10 
11 template<>
12 int GetSpecialValue<>(A* classPtr)
13 {
14    return  37;
15 }
16 template<>
17 int GetSpecialValue<>(B* classPtr)
18 {
19    return 21;
20 }
21 const * classPtr=GetA();
22 int ret=GetSpecialValue(classPtr);
23 cout<<ret<<endl; //out 3721! why not 37?
24 
25 
26 
第一段的問題在于看到指針想當(dāng)然認(rèn)為是地址,data 可以帶回反回值,其實因為這里是值傳遞,實參data把自己的值賦給了dataPtr,dataPtr后來確實從FindData()得到了想要的值,但這對一點影響也沒有,所以函數(shù)返回時,data的值沒有發(fā)生變化,也就是沒有帶回想要的值。
只要不想當(dāng)然,仔細(xì)一想就明白了,解決辦法很簡單:
1  void GetData(Data*& dataPtr)
2 4 {
3 5     dataPtr=FindData();
4 6 }
第二段的問題是沒有注意到那個const, T*  和 T const* 是不一樣的,不能完全匹配,所以不會找到對A類型的特化版本,解決辦法可以這樣:
 1 template<typename T>
 2 int GetSpecialValue(T const* classPtr)
 3 {
 4    return  3721;
 5 }
 6 
 7 template<>
 8 int GetSpecialValue<>(A const* classPtr)
 9 {
10    return  37;
11 }
12 template<>
13 int GetSpecialValue<>(B const* classPtr)
14 {
15    return 21;
16 }
能過這兩個小例子就可以知道,C++細(xì)節(jié)很多,要仔細(xì),不能想當(dāng)然。
posted on 2009-05-06 21:09 清源游民 閱讀(1800) 評論(5)  編輯 收藏 引用 所屬分類: C++

FeedBack:
# re: c++,要細(xì)心不能想當(dāng)然
2009-05-06 22:15 | Sunshine Alike
恍然小悟,謝了 :)  回復(fù)  更多評論
  
# re: c++,要細(xì)心不能想當(dāng)然
2009-05-20 20:52 | 閆軍yy
!!!  回復(fù)  更多評論
  
# re: c++,要細(xì)心不能想當(dāng)然
2009-06-01 13:05 | peng
您好:
我用第一段代碼做了一個測試,好象可以呀?
#include <stdio>
class Data{
public:
void somefunction(){printf("bbb\n");}
};
Data asd=Data();
Data* FindData() {
// return new Data(); //用這句也行
return &asd;
}

void GetData(Data* dataPtr) { dataPtr=FindData(); }

int main(int argc, char* argv[])
{
printf("aaa\n");
Data* data=NULL;
GetData(data);
data->somefunction();
return 0;
}

程序運行并打印出
aaa
bbb  回復(fù)  更多評論
  
# re: c++,要細(xì)心不能想當(dāng)然
2009-06-01 16:18 | 清源游民
@peng
你的這個測試其實引出了,c++的一個更深入的問題:c++對象模型。
在你的程序中,當(dāng)執(zhí)行GetData(data)后,你認(rèn)為data已經(jīng)有值了,非NULL,
要不怎么會沒報錯,而且打印了‘正確’結(jié)果,其實如果這樣寫你的測試代碼
Data* data=NULL;
//注意:你的原來那行注釋掉 GetData(data);
data->somefunction();
一樣會打印出結(jié)果:bbb,沒有報錯
你可能會懷疑:data=NULL????
沒錯,這就是c++對象模型問題了。編譯器會把data->somefunction()這行代碼改成類似這樣:
sonefunction(data),data就是this指針。因為somefunction()函數(shù)里沒有用到this指針,他為null,也無所謂。所以會打印出“bbb".

真的,c++要細(xì)心,不能想當(dāng)然,呵呵。

  回復(fù)  更多評論
  
# re: c++,要細(xì)心不能想當(dāng)然
2009-12-03 16:38 | joewan
@清源游民
這個點評真精彩!
雖然我對c++類型模型知道一些,以及mangling機(jī)制;
只是對這個
Data* data=NULL;
data->somefunction();
能打印出結(jié)果來頗感意外,NULL指針竟然也能解引用!

我也是從其他朋友blog,知道你,訂閱你的blog了,向你致敬!  回復(fù)  更多評論
  
<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

留言簿(35)

隨筆分類(78)

隨筆檔案(74)

文章檔案(5)

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            蜜臀va亚洲va欧美va天堂| 欧美午夜精品久久久久久浪潮| 久久免费国产精品1| 激情懂色av一区av二区av| 久久一区二区三区国产精品 | 一区二区三区视频在线观看| 欧美日本不卡| 亚洲专区国产精品| 免费观看成人| 一区二区三区国产| 国产日韩一区在线| 欧美成人精品在线播放| 一区二区日韩精品| 老色鬼精品视频在线观看播放| 亚洲国产成人av好男人在线观看| 欧美精品久久99| 午夜精品999| 91久久久久久国产精品| 香蕉久久精品日日躁夜夜躁| 伊人久久亚洲美女图片| 欧美视频四区| 久久琪琪电影院| 亚洲一区久久久| 欧美激情中文不卡| 欧美一区二区成人6969| 最新中文字幕一区二区三区| 国产精品久久久久一区二区| 久久亚洲一区| 午夜精品免费在线| 日韩亚洲欧美高清| 乱人伦精品视频在线观看| 亚洲性线免费观看视频成熟| 亚洲成人原创| 亚洲精品黄色| 久久人体大胆视频| 亚洲欧美日韩国产一区二区三区| 亚洲国产免费| 国内精品久久久久久| 欧美亚男人的天堂| 欧美韩日一区二区| 久久亚洲不卡| 欧美伊人久久久久久午夜久久久久 | 欧美视频在线免费看| 久久躁日日躁aaaaxxxx| 午夜精品久久久久久久久 | 亚洲伦理自拍| 欧美激情二区三区| 老鸭窝亚洲一区二区三区| 亚洲综合色激情五月| 日韩视频免费观看高清完整版| 国语自产精品视频在线看抢先版结局| 欧美视频一区二区三区| 欧美大片免费观看| 免费短视频成人日韩| 久久久久久伊人| 久久精品成人一区二区三区| 亚洲欧美视频在线观看视频| 国产精品99久久久久久久久久久久| 亚洲高清三级视频| 亚洲电影免费在线观看| 欧美xxxx在线观看| 裸体歌舞表演一区二区| 久久青青草原一区二区| 久久久久久久一区二区| 久久久精品国产一区二区三区| 欧美一区二区黄色| 午夜精品999| 性欧美xxxx视频在线观看| 欧美亚洲色图校园春色| 亚洲欧美另类国产| 久久国产精品72免费观看| 久久成人久久爱| 欧美在线一二三| 久久一区二区视频| 裸体歌舞表演一区二区| 欧美高潮视频| 亚洲欧洲另类| 一本色道久久综合狠狠躁的推荐| 日韩视频在线你懂得| 夜夜躁日日躁狠狠久久88av| 中文网丁香综合网| 午夜精品久久久久久99热| 久久国产婷婷国产香蕉| 蜜乳av另类精品一区二区| 欧美华人在线视频| 国产精品hd| 国产视频观看一区| 激情懂色av一区av二区av| 亚洲精品国产系列| 亚洲自拍三区| 久久亚洲色图| 91久久精品国产91性色| 中文在线一区| 久久黄色网页| 欧美精选午夜久久久乱码6080| 欧美午夜无遮挡| 国产日韩欧美自拍| 在线免费观看成人网| 亚洲美女视频在线观看| 欧美亚洲系列| 欧美a一区二区| 一本久久a久久免费精品不卡| 亚洲欧美激情精品一区二区| 久久影视三级福利片| 欧美日韩三级| 精品999久久久| 亚洲性线免费观看视频成熟| 久久人人爽爽爽人久久久| 91久久夜色精品国产九色| 亚洲免费在线电影| 欧美多人爱爱视频网站| 国产日韩视频一区二区三区| 亚洲精品网址在线观看| 久久久激情视频| 99精品国产高清一区二区| 欧美在线视频不卡| 欧美色欧美亚洲高清在线视频| 国产伪娘ts一区| 一个色综合导航| 久久影院午夜论| 亚洲午夜三级在线| 欧美激情乱人伦| 黄色成人av网| 香蕉免费一区二区三区在线观看 | 亚洲高清视频一区二区| 亚洲女爱视频在线| 亚洲国产精品成人久久综合一区| 午夜精品国产更新| 欧美性开放视频| 亚洲肉体裸体xxxx137| 久久精品国产清自在天天线| 日韩视频三区| 欧美成人tv| 亚洲国产精品成人久久综合一区| 欧美一区二粉嫩精品国产一线天| 亚洲精品国产视频| 免费中文日韩| 在线电影一区| 久久亚洲精品一区二区| 午夜精品一区二区三区在线视 | 久久久久se| 国产色综合网| 久久国内精品视频| 亚洲一级片在线看| 国产精品国产三级国产aⅴ入口| 亚洲精品黄网在线观看| 免费欧美日韩| 久久久久久久久久久久久女国产乱 | 亚洲深夜福利| 亚洲国产一区在线| 免费一级欧美在线大片| 在线观看91精品国产麻豆| 久久久人成影片一区二区三区| 亚洲制服少妇| 国产欧美精品日韩| 欧美在线看片a免费观看| 亚洲一级二级在线| 欧美国产第二页| 国产精品夫妻自拍| 一本久久青青| 亚洲日本欧美日韩高观看| 嫩草影视亚洲| 日韩午夜在线播放| 亚洲美女在线观看| 欧美日韩在线一区二区| 亚洲免费在线播放| 亚洲伊人久久综合| 国产亚洲va综合人人澡精品| 久久都是精品| 久久精品一区二区三区不卡牛牛| 狠狠狠色丁香婷婷综合久久五月 | 国产美女精品视频免费观看| 欧美专区在线播放| 久久久久国产精品厨房| 亚洲二区精品| 91久久国产精品91久久性色| 欧美日韩中文字幕在线| 性色一区二区三区| 久久久999精品| 91久久夜色精品国产九色| 亚洲精品一区二区三区不| 欧美午夜视频在线观看| 久久精品日产第一区二区三区| 欧美一区亚洲二区| 亚洲人精品午夜| 亚洲午夜激情网站| 国产无遮挡一区二区三区毛片日本| 老司机午夜精品| 欧美韩日高清| 久久激情视频| 欧美激情第1页| 欧美亚洲视频| 欧美成人午夜77777| 亚洲在线黄色| 久久视频精品在线| 亚洲一区二区三区免费观看| 欧美在线91| 亚洲天堂网站在线观看视频| 欧美一区二区三区久久精品茉莉花| 亚洲国产精品成人一区二区|