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

兩段想當然寫下的代碼,你看出問題了吧
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()得到了想要的值,但這對一點影響也沒有,所以函數(shù)返回時,data的值沒有發(fā)生變化,也就是沒有帶回想要的值。
只要不想當然,仔細一想就明白了,解決辦法很簡單:
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++細節(jié)很多,要仔細,不能想當然。
posted on 2009-05-06 21:09 清源游民 閱讀(1800) 評論(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++對象模型。
在你的程序中,當執(zhí)行GetData(data)后,你認為data已經(jīng)有值了,非NULL,
要不怎么會沒報錯,而且打印了‘正確’結果,其實如果這樣寫你的測試代碼
Data* data=NULL;
//注意:你的原來那行注釋掉 GetData(data);
data->somefunction();
一樣會打印出結果:bbb,沒有報錯
你可能會懷疑:data=NULL????
沒錯,這就是c++對象模型問題了。編譯器會把data->somefunction()這行代碼改成類似這樣:
sonefunction(data),data就是this指針。因為somefunction()函數(shù)里沒有用到this指針,他為null,也無所謂。所以會打印出“bbb".

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

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

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

留言簿(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>
            久久一区中文字幕| 亚洲精选久久| 欧美一区二区日韩| 欧美午夜精品久久久久免费视| 免费观看一区| 亚洲综合电影一区二区三区| 欧美日韩精品伦理作品在线免费观看 | 欧美精品色综合| 亚洲丰满少妇videoshd| 免费高清在线一区| 女生裸体视频一区二区三区| 日韩一区二区精品葵司在线| 亚洲乱码国产乱码精品精可以看| 在线一区二区三区做爰视频网站| 亚洲欧美激情视频在线观看一区二区三区| 一区二区激情小说| 国产精品美女久久久久久2018| 狠狠综合久久| 欧美激情一区二区三区| 久久午夜电影| 一区二区久久| 欧美一级久久久| 在线看片一区| 99re8这里有精品热视频免费 | 久久久久久久综合日本| 在线观看91精品国产麻豆| 欧美激情一区在线观看| 欧美日韩一区二区在线视频| 久久精品国产一区二区电影 | 久久er99精品| 蜜桃精品久久久久久久免费影院| 国产精品免费一区二区三区在线观看| 亚洲成人在线观看视频| 亚洲人永久免费| 国产伦理一区| 麻豆九一精品爱看视频在线观看免费 | 国产一区二区成人| 亚洲韩国一区二区三区| 国产精品一二三| 欧美激情第9页| 国产欧美精品xxxx另类| 欧美1区2区| 国产精品一区二区你懂得| 欧美国产精品| 国产午夜精品理论片a级探花 | 日韩视频不卡中文| 午夜在线一区| 亚洲午夜精品视频| 麻豆国产精品va在线观看不卡| 国产一区二区三区在线观看网站| 亚洲永久视频| 欧美成人午夜剧场免费观看| 久久久www免费人成黑人精品| 午夜免费电影一区在线观看| 揄拍成人国产精品视频| 午夜精品免费视频| 亚洲一区久久久| 欧美电影免费网站| 麻豆精品精华液| 国产日产精品一区二区三区四区的观看方式 | 香港成人在线视频| 亚洲午夜视频| 欧美日韩国产大片| 亚洲高清不卡av| 91久久一区二区| 久久伊伊香蕉| 狂野欧美一区| 激情久久一区| 久久精品人人做人人爽| 欧美在线精品免播放器视频| 国产精品久久久久久久久免费桃花 | 在线播放不卡| 欧美专区中文字幕| 久久久999国产| 精品成人一区二区三区| 午夜视频精品| 久久婷婷成人综合色| 黄色成人av在线| 久久精品视频一| 免费看黄裸体一级大秀欧美| 在线日韩av片| 欧美国内亚洲| 99riav久久精品riav| 亚洲午夜精品一区二区| 国产精品igao视频网网址不卡日韩| 欧美在线亚洲一区| 国产亚洲精品v| 久久久久久久综合| 欧美成人一区二区三区在线观看| 欧美视频免费在线| 一区二区高清在线观看| 亚洲欧美中文字幕| 国产日韩精品一区二区| 久久精品午夜| 亚洲电影自拍| 亚洲一区二区三区国产| 国产午夜精品一区二区三区视频| 亚洲国产精品久久久久婷婷884| 国产精品久久久久久久久久免费| 免费成人性网站| 一本一本久久a久久精品综合妖精| 欧美一区视频在线| 欧美粗暴jizz性欧美20| 亚洲一区二区三区成人在线视频精品| 久久综合久久久| 亚洲日本一区二区三区| 性欧美8khd高清极品| 亚洲电影视频在线| 国产精品久久久久久久久| 久久久久se| 一片黄亚洲嫩模| 美腿丝袜亚洲色图| 亚洲视频日本| 亚洲国产黄色| 国产欧美不卡| 欧美精品日日鲁夜夜添| 欧美在线一二三| 99国产精品私拍| 亚洲第一区中文99精品| 亚洲欧美日韩在线观看a三区| 欧美日韩精品欧美日韩精品 | 亚洲精品久久嫩草网站秘色 | 一区二区精品国产| 欧美福利在线| 欧美在线首页| 亚洲视频精品在线| 亚洲国产精品高清久久久| 国产精品一区二区三区久久久| 一区二区日韩伦理片| 免费精品视频| 久久久久久伊人| 亚洲欧美在线一区二区| av成人动漫| 亚洲精品午夜| 91久久亚洲| 亚洲国产天堂网精品网站| 国产一区二区三区精品欧美日韩一区二区三区 | 91久久国产综合久久蜜月精品| 久久久亚洲国产天美传媒修理工| 久久久精品视频成人| 亚洲欧美中日韩| 亚洲免费中文| 亚洲校园激情| 亚洲视频综合在线| 夜夜爽av福利精品导航| 日韩网站在线看片你懂的| 亚洲精品视频一区二区三区| 在线精品一区| 亚洲国产裸拍裸体视频在线观看乱了| 免播放器亚洲一区| 久久综合综合久久综合| 久久人人97超碰国产公开结果 | 亚洲国产婷婷综合在线精品 | 狠狠色狠狠色综合日日小说| 国产欧美二区| 国产一区二区三区日韩| 国产一区二区久久久| 国产亚洲精品久久久久动| 国产日韩综合一区二区性色av| 久久不见久久见免费视频1| 亚洲网站在线观看| 亚洲一区三区视频在线观看| 午夜精品久久久久99热蜜桃导演| 亚洲高清一区二| 亚洲激情综合| 亚洲精品久久久久久下一站| 一区二区三区福利| 在线亚洲+欧美+日本专区| 亚洲主播在线播放| 欧美一区日韩一区| 欧美不卡一区| 欧美日韩综合| 国产一区二区欧美| 亚洲黄色av| 亚洲欧美国产精品桃花| 久久精品国产精品| 亚洲福利视频专区| 亚洲资源在线观看| 久久精品毛片| 欧美日精品一区视频| 国产亚洲一区在线播放| 亚洲缚视频在线观看| 亚洲视频电影图片偷拍一区| 久久九九全国免费精品观看| 亚洲国产精品传媒在线观看| 一区二区三区欧美在线| 久久蜜桃香蕉精品一区二区三区| 亚洲一二三区精品| 欧美专区一区二区三区| 欧美日韩久久久久久| 国产一区欧美日韩| 亚洲视频在线观看视频| 久久夜色精品国产欧美乱| 亚洲九九精品| 久久嫩草精品久久久精品| 国产精品免费一区豆花| 亚洲精品在线免费| 老司机成人在线视频| 中国亚洲黄色| 欧美精品二区|