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

兩段想當(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 清源游民 閱讀(1795) 評論(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
?。。?nbsp; 回復(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機制;
只是對這個
Data* data=NULL;
data->somefunction();
能打印出結(jié)果來頗感意外,NULL指針竟然也能解引用!

我也是從其他朋友blog,知道你,訂閱你的blog了,向你致敬!  回復(fù)  更多評論
  
<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

留言簿(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>
            欧美xxx成人| 国产一区二区黄色| 亚洲社区在线观看| 亚洲精品美女在线| 欧美成va人片在线观看| 久久久久国产精品www| 欧美亚洲综合久久| 久久精品久久99精品久久| 亚洲欧美激情一区| 午夜欧美电影在线观看| 久久九九国产精品| 欧美成年人在线观看| 亚洲精品一区二区三区樱花| 亚洲国产精品精华液2区45| 日韩西西人体444www| 亚洲伊人伊色伊影伊综合网| 久久国产精品电影| 久久久青草婷婷精品综合日韩| 久久蜜桃资源一区二区老牛| 欧美激情91| 国产一区二区三区精品久久久 | 久久丁香综合五月国产三级网站| 欧美资源在线| 欧美乱大交xxxxx| 国产精品午夜国产小视频| 国产伪娘ts一区| 亚洲日本一区二区三区| 亚洲一区二区三区中文字幕| 久久er精品视频| 欧美华人在线视频| 亚洲一区中文| 欧美顶级艳妇交换群宴| 一本色道**综合亚洲精品蜜桃冫| 亚洲第一精品电影| av72成人在线| 欧美一区二区三区在线播放| 美女尤物久久精品| 国产欧美日韩在线观看| 亚洲人成网站精品片在线观看| 午夜精品久久| 亚洲国产欧美国产综合一区 | 亚洲一区激情| 欧美尤物一区| 亚洲人成艺术| 玖玖国产精品视频| 国产片一区二区| 午夜久久tv| 日韩视频免费大全中文字幕| 麻豆九一精品爱看视频在线观看免费| 国产欧美亚洲精品| 亚洲专区国产精品| 999亚洲国产精| 欧美日韩国产综合新一区| 亚洲黄色影院| 欧美国产日本在线| 欧美成人精品一区| 亚洲人成亚洲人成在线观看| 欧美大胆成人| 美女精品在线观看| 亚洲国产成人av| 欧美成人一区二区| 久热精品视频在线观看一区| 在线观看精品| 欧美成在线视频| 欧美99在线视频观看| 亚洲国产美女| 欧美黄免费看| 欧美日韩免费观看一区| 一本久道久久综合婷婷鲸鱼| 亚洲人成网站999久久久综合| 欧美成人免费网站| 在线亚洲精品福利网址导航| 亚洲三级影院| 国产精品成人国产乱一区| 亚洲一区二区免费视频| 亚洲午夜激情网页| 国产精自产拍久久久久久| 欧美在线国产精品| 午夜在线不卡| 在线播放亚洲| 亚洲激情二区| 欧美午夜精品电影| 久久av一区二区| 美女福利精品视频| 宅男噜噜噜66国产日韩在线观看| 日韩视频中文字幕| 国产美女搞久久| 欧美激情麻豆| 国产精品成人在线观看| 久久精品首页| 亚洲三级性片| 国产一区二区三区在线观看免费视频| 亚洲欧美国产77777| 久久中文久久字幕| 一区二区三区产品免费精品久久75 | 欧美激情在线观看| 9久re热视频在线精品| 国产亚洲a∨片在线观看| 欧美ed2k| 久久精品中文字幕一区| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲国产欧美精品| 国产精品xvideos88| 欧美阿v一级看视频| 午夜久久一区| 欧美一区在线视频| 亚洲一区免费观看| 99ri日韩精品视频| 欧美成人首页| 欧美激情自拍| 亚洲国产精品传媒在线观看| 亚洲电影免费观看高清完整版在线观看 | 亚洲毛片av| 亚洲精品日产精品乱码不卡| 久久高清免费观看| 午夜精品久久久久久久蜜桃app| 久久久久久网址| 99re6这里只有精品| 久久精品国产99国产精品| 欧美激情中文字幕一区二区 | 久久这里只精品最新地址| 欧美视频一区二区在线观看| 欧美系列一区| 国产一区深夜福利| 日韩一级片网址| 午夜精彩国产免费不卡不顿大片| 久久精品30| 日韩亚洲欧美一区| 欧美激情aaaa| 韩国福利一区| 亚洲男人的天堂在线| 久久久久亚洲综合| 亚洲图片在区色| 欧美日韩高清不卡| 亚洲一区二区黄色| 欧美韩国日本综合| 久久er精品视频| 国产精品自拍一区| 亚洲婷婷综合久久一本伊一区| 欧美在线三区| 亚洲欧美日韩一区二区| 欧美婷婷久久| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 久久久精品一区| 欧美在线视频a| 亚洲韩国青草视频| 99av国产精品欲麻豆| 国产精品久久激情| 裸体一区二区| 亚洲视频专区在线| 99精品黄色片免费大全| 欧美二区不卡| 一本久道久久综合狠狠爱| 一区二区三区高清不卡| 亚洲精品日韩精品| 一区二区不卡在线视频 午夜欧美不卡在 | 国产女主播视频一区二区| 欧美高清在线观看| 欧美日韩久久精品| 亚洲国产一区在线| 中文欧美日韩| 欧美18av| 久久成人精品| 国产日本欧美一区二区| 亚洲男同1069视频| 暖暖成人免费视频| 久久精品亚洲一区二区三区浴池 | 免费在线看成人av| 久久精品国产第一区二区三区| 曰韩精品一区二区| 亚洲美女黄网| 一区二区精品国产| 在线免费观看一区二区三区| 久久久欧美精品sm网站| 亚洲精品三级| 久久成人资源| 亚洲另类自拍| 国产美女精品人人做人人爽| 久久久久www| 亚洲精品一级| 久久久亚洲精品一区二区三区| 亚洲精品乱码久久久久久日本蜜臀 | 美女黄色成人网| 99re成人精品视频| 国产婷婷97碰碰久久人人蜜臀| 久久蜜臀精品av| 亚洲自拍三区| 亚洲精品久久| 久久精品最新地址| 亚洲网站视频福利| 亚洲国产精品久久精品怡红院| 国产精品swag| 欧美久久久久久久久久| 日韩亚洲欧美在线观看| 亚洲视频电影图片偷拍一区| 国产亚洲精品成人av久久ww| 欧美精品久久久久久久久老牛影院 | 国产精品免费在线 | 欧美经典一区二区三区| 久久精彩免费视频|