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

兩段想當(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ì)點(diǎn)
 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 可以帶回反回值,其實(shí)因?yàn)檫@里是值傳遞,實(shí)參data把自己的值賦給了dataPtr,dataPtr后來確實(shí)從FindData()得到了想要的值,但這對一點(diǎn)影響也沒有,所以函數(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
?。?!  回復(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;
}

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

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

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

我也是從其他朋友blog,知道你,訂閱你的blog了,向你致敬!  回復(fù)  更多評論
  
<2009年12月>
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>
            亚洲伦理久久| 久久美女艺术照精彩视频福利播放| 9国产精品视频| 亚洲精品乱码久久久久久日本蜜臀| 亚洲第一二三四五区| 在线精品视频一区二区三四| 一区二区三区在线视频观看 | 欧美日韩卡一卡二| 欧美大片在线影院| 欧美日韩一区二区视频在线 | 最新国产成人在线观看| 亚洲电影免费观看高清| 日韩手机在线导航| 亚洲综合激情| 久久亚洲春色中文字幕| 亚洲国产婷婷| 99精品国产在热久久| 亚洲少妇自拍| 久久精品网址| 欧美理论视频| 国产一本一道久久香蕉| 亚洲国产精品嫩草影院| 亚洲淫性视频| 欧美.www| 午夜精品福利视频| 欧美成人精品1314www| 国产精品高潮呻吟久久| 国内揄拍国内精品少妇国语| 亚洲免费大片| 久热成人在线视频| 亚洲视频一起| 欧美精品在线一区二区| 国语自产在线不卡| 亚洲综合另类| 亚洲国产精品久久久久婷婷老年| 亚洲一二三区精品| 亚洲免费成人av| 国产在线不卡视频| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲永久在线| 亚洲国产天堂久久综合| 久久精品国产96久久久香蕉| 国产精品大片| 99re66热这里只有精品3直播| 久久先锋影音| 欧美一区二区视频网站| 国产精品国产三级国产专播品爱网| 亚洲第一区色| 老鸭窝亚洲一区二区三区| 亚洲一区二区精品视频| 欧美日本亚洲韩国国产| 亚洲高清视频在线| 久久影院亚洲| 久久久国产精彩视频美女艺术照福利| 国产精品国码视频| 亚洲综合三区| 一区二区av| 国产精品a级| 亚洲午夜电影在线观看| 一二三四社区欧美黄| 欧美日韩免费在线观看| 99国产麻豆精品| 99www免费人成精品| 欧美日韩综合网| 亚洲在线免费视频| 亚洲一区二区在线看| 国产精品午夜电影| 久久国产天堂福利天堂| 欧美一区二区三区四区在线观看| 国产精品一区二区三区久久久| 亚洲欧美视频在线| 欧美一区二区三区免费视| 国模精品一区二区三区| 美日韩精品免费观看视频| 久久一区二区视频| 日韩亚洲不卡在线| 亚洲一区二区四区| 狠狠操狠狠色综合网| 欧美肥婆在线| 欧美午夜精品| 久久亚洲国产精品日日av夜夜| 久久精品亚洲一区二区三区浴池| 伊人夜夜躁av伊人久久| 亚洲国产精品www| 欧美日韩视频在线观看一区二区三区| 亚洲一区bb| 欧美中日韩免费视频| 91久久在线播放| 亚洲性视频网站| 一区在线视频| 一本久道久久久| 狠狠色综合网| 亚洲精品综合| 国内久久婷婷综合| 亚洲日本欧美在线| 国产乱理伦片在线观看夜一区 | 亚洲欧美日韩国产综合在线 | 玖玖玖国产精品| 国产精品99久久久久久宅男| 亚洲一区高清| 亚洲欧洲日本国产| 亚洲影视九九影院在线观看| 尤妮丝一区二区裸体视频| 99视频一区二区| 亚洲大胆人体在线| 亚洲尤物在线| 99re在线精品| 久久婷婷国产综合精品青草| 亚洲一二三区在线观看| 久久一区中文字幕| 亚洲欧美中日韩| 欧美成人中文字幕在线| 久久精品视频在线看| 欧美日本国产| 欧美黄色一级视频| 国产亚洲一本大道中文在线| 99国产精品久久久久久久| 亚洲观看高清完整版在线观看| 亚洲欧美在线视频观看| 夜夜嗨av一区二区三区网页| 欧美在线视频免费| 午夜在线不卡| 国产精品mm| 99re视频这里只有精品| 亚洲国产精品999| 欧美在线播放| 欧美在线一区二区三区| 国产精品久久一级| 一本大道久久a久久精二百| 夜夜嗨一区二区| 欧美精品成人在线| 亚洲国产一区二区三区青草影视| 激情六月婷婷综合| 久久精品国产一区二区电影 | 精品福利免费观看| 久久精品国产精品| 久久人体大胆视频| 韩国v欧美v日本v亚洲v| 欧美一区二区精品| 国产伦精品一区二区三区在线观看| 9久re热视频在线精品| 一本色道婷婷久久欧美| 欧美日韩国产成人在线免费| 亚洲欧洲日本国产| 亚洲视频专区在线| 国产精品久久久久国产精品日日| 在线亚洲免费视频| 欧美在线观看www| 国内精品久久久久久影视8 | 久久午夜影视| 欧美激情精品久久久久久| 亚洲片区在线| 欧美日韩国产一区二区三区地区| 亚洲精品欧洲精品| 性做久久久久久久免费看| 国际精品欧美精品| 国产精品老女人精品视频| 亚洲视频在线观看| 久久久久久久久久久成人| 伊人久久av导航| 欧美国产精品日韩| 一区二区三区四区在线| 久久久久久久成人| 亚洲欧洲视频在线| 欧美亚一区二区| 欧美一区二区免费视频| 欧美成人精品在线| 亚洲无限av看| 黑人巨大精品欧美一区二区小视频 | 免费高清在线一区| 99精品热视频| 久久天天狠狠| 一本一本久久| 国产一区高清视频| 欧美精品一区二区在线观看| 亚洲永久精品国产| 亚洲福利在线观看| 欧美在线亚洲在线| 日韩午夜黄色| 精品成人乱色一区二区| 欧美日韩亚洲在线| 久久免费黄色| 亚洲欧美日本国产有色| 亚洲激情小视频| 久久久福利视频| 亚洲小说区图片区| 亚洲精品自在在线观看| 国产一区91| 国产精品视频yy9299一区| 欧美成在线视频| 久久精品国产综合| 亚洲欧美成人| 一本色道久久综合亚洲精品不卡| 蜜桃精品久久久久久久免费影院| 午夜免费久久久久| 在线亚洲免费视频| 99ri日韩精品视频| 亚洲人在线视频| 亚洲国产日韩综合一区| 国内精品伊人久久久久av影院|