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

兩段想當然寫下的代碼,你看出問題了吧
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 清源游民 閱讀(1795) 評論(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了,向你致敬!  回復  更多評論
  
<2007年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

留言簿(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>
            亚洲色图在线视频| 一区二区三区四区蜜桃| 久久视频一区二区| 久久精品免费看| 久久国产66| 两个人的视频www国产精品| 久久久久9999亚洲精品| 欧美中文日韩| 久久综合色影院| 欧美精品一区二区蜜臀亚洲| 欧美精品一级| 国产精品资源| 亚洲第一精品在线| 亚洲精品国产品国语在线app| av成人福利| 欧美一区二区三区婷婷月色 | 久久久久久久一区| 欧美www视频在线观看| 欧美日韩国产一区| 国产一二精品视频| 亚洲美女啪啪| 欧美在线观看网站| 亚洲高清在线精品| 日韩视频免费| 久久久不卡网国产精品一区| 欧美日韩一卡二卡| 国产资源精品在线观看| 99天天综合性| 久久久夜夜夜| 亚洲天堂成人| 在线观看久久av| 亚洲国产精品一区二区第四页av | 国产伦精品一区二区三区免费迷| 国产伪娘ts一区| 韩国v欧美v日本v亚洲v| 在线精品视频一区二区| 夜夜精品视频| 久久久欧美一区二区| 亚洲精品国产日韩| 亚洲一区二区少妇| 欧美成人亚洲成人| 国精品一区二区三区| 亚洲欧美国产日韩天堂区| 亚洲茄子视频| 羞羞视频在线观看欧美| 欧美日韩激情网| 最新国产精品拍自在线播放| 久久亚洲综合| 香港久久久电影| 国产精品永久入口久久久| 亚洲一二三区在线| 亚洲日本电影| 欧美大胆a视频| 亚洲国产欧美一区| 久久久一区二区| 久久国产日韩欧美| 国产欧美日韩专区发布| 午夜精品久久| 亚洲影院色无极综合| 国产精品国产三级国产专播精品人 | 亚洲午夜一区二区三区| 欧美少妇一区二区| av不卡在线观看| 亚洲精品视频在线观看免费| 欧美激情一区在线| 一区二区免费在线播放| 在线一区二区三区四区五区| 国产精品国产三级国产普通话三级 | 国产一区二区三区在线播放免费观看 | 亚洲国产精品成人| 欧美成人午夜视频| 日韩一区二区久久| 亚洲精品国产精品国自产观看浪潮 | 亚洲欧美一区二区在线观看| 国产精品国产三级国产aⅴ入口 | 国产情人节一区| 久久久视频精品| 久久久久国产一区二区三区| 亚洲国产成人tv| 亚洲激情视频在线播放| 欧美色大人视频| 性欧美暴力猛交69hd| 欧美在线观看你懂的| 亚洲第一福利视频| 日韩视频在线观看免费| 国产精品家庭影院| 久久精品亚洲精品| 美女脱光内衣内裤视频久久影院 | 免费在线播放第一区高清av| 日韩视频在线免费观看| 亚洲图色在线| 狠狠操狠狠色综合网| 亚洲国产精品电影| 国产精品美女久久久| 欧美电影免费观看大全| 国产精品爱啪在线线免费观看| 久久精品中文字幕一区| 欧美成人精品激情在线观看| 亚洲欧美三级伦理| 免费成人av在线| 亚洲影院在线| 免费亚洲一区| 欧美一区二区在线播放| 你懂的成人av| 香港久久久电影| 欧美电影在线观看| 久久久久国产精品www| 欧美日韩国产精品一区| 嫩草国产精品入口| 国产免费亚洲高清| 亚洲三级视频| 亚洲激情视频在线| 久久久久久久久蜜桃| 欧美一级大片在线观看| 欧美极品欧美精品欧美视频| 久久人人精品| 国产亚洲va综合人人澡精品| 一区二区三区视频免费在线观看 | 欧美日韩国产黄| 久久久久综合| 欧美日韩在线看| 亚洲国产精品999| 国产一区二区三区久久 | 国产精品久久久久毛片软件 | 国内精品一区二区三区| 制服丝袜亚洲播放| 日韩视频一区二区三区在线播放免费观看| 亚洲你懂的在线视频| 亚洲永久免费视频| 欧美日韩国产色站一区二区三区| 男人的天堂亚洲| 影音先锋另类| 久久久久国产精品麻豆ai换脸| 久久国内精品自在自线400部| 国产精品亚发布| 午夜精品三级视频福利| 亚洲欧美日本另类| 国产精品视频内| 亚洲欧美网站| 久久免费观看视频| 狠狠色2019综合网| 久久久久久久久久久久久久一区| 久久久久国色av免费看影院| 国产一区二区三区日韩| 久久久久五月天| 亚洲第一中文字幕| 亚洲麻豆av| 欧美三级在线视频| 午夜精品福利一区二区三区av | 亚洲日本在线视频观看| 日韩亚洲欧美高清| 欧美日韩精品免费观看视一区二区 | 亚洲神马久久| 欧美午夜久久久| 亚洲在线免费观看| 久久久国产精品亚洲一区| 黄色成人av| 欧美高清视频在线播放| 999在线观看精品免费不卡网站| 亚洲综合精品一区二区| 国产区欧美区日韩区| 久久久久一区二区三区| 亚洲欧洲综合另类在线| 亚洲一区免费视频| 国产一区亚洲一区| 欧美国产成人在线| 亚洲一区bb| 欧美成人免费大片| 中文亚洲字幕| 国色天香一区二区| 欧美成人亚洲成人| 午夜久久美女| 亚洲电影免费观看高清完整版在线| 欧美国产综合| 亚洲欧美一区在线| 精品动漫3d一区二区三区| 欧美高清免费| 先锋亚洲精品| 亚洲精品欧美在线| 久久综合伊人| 亚洲欧美激情在线视频| 狠狠爱综合网| 国产精品户外野外| 久热精品视频在线免费观看| 9l视频自拍蝌蚪9l视频成人 | 亚洲黄色性网站| 欧美一区二区三区另类| 最新69国产成人精品视频免费| 国产精品欧美日韩| 免费观看成人网| 亚洲自拍16p| 欧美韩国日本综合| 亚洲欧美国产高清va在线播| 亚洲免费大片| 在线观看av一区| 国产精品男女猛烈高潮激情 | 亚洲神马久久| 亚洲欧洲日本mm| 国产一区二区久久| 国产精品专区一|