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

兩段想當然寫下的代碼,你看出問題了吧
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();
第二段代碼,更得仔細點
 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 
第一段的問題在于看到指針想當然認為是地址,data 可以帶回反回值,其實因為這里是值傳遞,實參data把自己的值賦給了dataPtr,dataPtr后來確實從FindData()得到了想要的值,但這對一點影響也沒有,所以函數返回時,data的值沒有發生變化,也就是沒有帶回想要的值。
只要不想當然,仔細一想就明白了,解決辦法很簡單:
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++細節很多,要仔細,不能想當然。
posted on 2009-05-06 21:09 清源游民 閱讀(1781) 評論(5)  編輯 收藏 引用 所屬分類: C++

FeedBack:
# re: c++,要細心不能想當然
2009-05-06 22:15 | Sunshine Alike
恍然小悟,謝了 :)  回復  更多評論
  
# re: c++,要細心不能想當然
2009-05-20 20:52 | 閆軍yy
!!!  回復  更多評論
  
# re: c++,要細心不能想當然
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  回復  更多評論
  
# re: c++,要細心不能想當然
2009-06-01 16:18 | 清源游民
@peng
你的這個測試其實引出了,c++的一個更深入的問題:c++對象模型。
在你的程序中,當執行GetData(data)后,你認為data已經有值了,非NULL,
要不怎么會沒報錯,而且打印了‘正確’結果,其實如果這樣寫你的測試代碼
Data* data=NULL;
//注意:你的原來那行注釋掉 GetData(data);
data->somefunction();
一樣會打印出結果:bbb,沒有報錯
你可能會懷疑:data=NULL????
沒錯,這就是c++對象模型問題了。編譯器會把data->somefunction()這行代碼改成類似這樣:
sonefunction(data),data就是this指針。因為somefunction()函數里沒有用到this指針,他為null,也無所謂。所以會打印出“bbb".

真的,c++要細心,不能想當然,呵呵。

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

我也是從其他朋友blog,知道你,訂閱你的blog了,向你致敬!  回復  更多評論
  
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

留言簿(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>
            国产视频丨精品|在线观看| 99成人在线| 一区二区欧美国产| 欧美自拍丝袜亚洲| 亚洲女人天堂成人av在线| 欧美国产成人精品| 女人香蕉久久**毛片精品| 精东粉嫩av免费一区二区三区| 久久午夜激情| 国产精品高清在线观看| 亚洲图片在线| 欧美伊人久久| 国产一区亚洲一区| 久热国产精品视频| 亚洲黄色片网站| 日韩视频不卡| 欧美激情网友自拍| 日韩小视频在线观看专区| 欧美日韩xxxxx| 午夜欧美电影在线观看| 久久婷婷影院| 日韩亚洲精品视频| 久久久91精品国产一区二区三区| 亚洲福利精品| 欧美一区二区三区播放老司机| 国产欧美精品日韩区二区麻豆天美 | 亚洲欧美国产另类| 国产精品日本| 久久aⅴ国产紧身牛仔裤| 欧美成人性网| 亚洲在线一区二区| 亚洲精品偷拍| 国产欧美日本一区二区三区| 中文av一区特黄| 欧美午夜电影网| 午夜精品久久久久久久99黑人| 六月婷婷久久| 亚洲欧美日韩网| 91久久精品视频| 狠狠色伊人亚洲综合网站色| 欧美日韩成人在线视频| 亚洲伊人一本大道中文字幕| 久久综合伊人77777尤物| 99国产精品自拍| 国产一区二区主播在线| 免费美女久久99| 欧美一级久久久| 免费成人黄色片| 久久资源av| 午夜精彩视频在线观看不卡 | 亚洲欧洲日本专区| 国产精品久久国产三级国电话系列 | 欧美激情导航| 久久人人爽人人爽| 亚洲女ⅴideoshd黑人| 亚洲日本在线观看| 亚洲精品色图| 亚洲国产精品第一区二区| 国产精品青草综合久久久久99| 久久精品视频免费观看| 亚洲精品婷婷| 最新日韩在线| 中文久久乱码一区二区| 亚洲一区视频在线| 性欧美暴力猛交69hd| 先锋亚洲精品| 免费在线日韩av| 欧美日韩一区二区三区高清| 国产精品黄视频| 欧美在线看片a免费观看| 午夜亚洲激情| 欧美激情一区二区三区成人| 欧美视频成人| 欧美日韩成人在线播放| 国产精品私拍pans大尺度在线| 国产一区二区精品丝袜| 国产午夜久久| 日韩午夜精品视频| 欧美一区国产一区| 国产日韩三区| 亚洲国产一区二区三区青草影视| 亚洲破处大片| 欧美精品激情在线| 欧美日韩国产在线一区| 国产精品毛片a∨一区二区三区|国 | 国产精品综合久久久| 国产日韩在线视频| 1000部精品久久久久久久久| 一区二区三区毛片| 麻豆成人综合网| 亚洲高清影视| 亚洲一区二区三区免费观看| 久久九九精品| 国产精品免费aⅴ片在线观看| 欧美在线高清| 欧美大片国产精品| 国产午夜亚洲精品羞羞网站| 亚洲国产欧美一区二区三区久久 | 国产精品国产福利国产秒拍| 国产精品无人区| 国产农村妇女毛片精品久久麻豆| 国产一区二区久久| 亚洲电影下载| 亚洲综合国产精品| 久久国产加勒比精品无码| 久久精品视频在线| 亚洲精品欧美| 亚洲欧美日韩一区在线| 另类天堂av| 国产午夜精品久久| 亚洲欧美日韩国产另类专区| 欧美h视频在线| 在线综合+亚洲+欧美中文字幕| 久久经典综合| 国产精品一区二区三区久久 | 午夜视频久久久| 亚洲精品一二三| 久久亚洲视频| 好看的日韩视频| 亚洲欧美中日韩| 亚洲国产91| 久久人人爽人人爽| 国产欧美精品在线观看| 亚洲视频1区2区| 免费h精品视频在线播放| 在线视频一区二区| 欧美视频网址| 中文在线不卡| 亚洲视频1区| 国产欧美精品日韩| 亚洲午夜电影| 夜夜狂射影院欧美极品| 欧美三级网址| 久久国产天堂福利天堂| 亚洲欧美日韩中文视频| 国产欧美在线观看一区| 久久视频一区二区| 久久影院午夜论| 亚洲激情婷婷| 亚洲电影免费观看高清| 欧美一区二区视频97| 欧美日本二区| 99热精品在线| 亚洲人成在线播放| 久久女同互慰一区二区三区| 国产一区久久久| 欧美成人视屏| 欧美日韩精品一本二本三本| 99国产一区二区三精品乱码| 亚洲日本aⅴ片在线观看香蕉| 欧美久久在线| 欧美一进一出视频| 久久久视频精品| 亚洲国产视频直播| 亚洲国产日日夜夜| 国产精品久久国产精品99gif| 久久久国产午夜精品| 欧美xx视频| 亚洲一区二区三区中文字幕在线| 午夜国产欧美理论在线播放| 黑人极品videos精品欧美裸| 亚洲电影免费观看高清| 国产精品―色哟哟| 欧美va天堂在线| 欧美性猛交xxxx免费看久久久| 久久久久久精| 欧美三日本三级少妇三99| 久久米奇亚洲| 国产精品久久久久久户外露出| 免费的成人av| 国产精品视频网址| 亚洲激情在线激情| 伊人成人在线视频| 亚洲天堂网在线观看| 在线观看欧美精品| 亚洲天堂第二页| 亚洲国产小视频| 欧美在线观看天堂一区二区三区| 亚洲精品社区| 久久久99国产精品免费| 亚洲一级电影| 久久综合久久久| 久久精精品视频| 国产精品扒开腿爽爽爽视频 | 国产女人18毛片水18精品| 亚洲成人中文| 国产一区二区精品在线观看| 一区二区高清视频| 91久久在线| 久久综合激情| 久久久久久有精品国产| 欧美色欧美亚洲另类七区| 亚洲国产三级| 亚洲观看高清完整版在线观看| 亚洲一区在线观看视频 | 夜夜夜久久久| 蜜臀av一级做a爰片久久| 欧美成va人片在线观看| 狠狠色香婷婷久久亚洲精品| 欧美一级片一区|