| 查看: 2198 | 回復(fù): 11 | ||
[求助]
c++ 一道題目,關(guān)于cout 和printf的差異,不理解(p82) 已有4人參與
|
||
|
下面是主函數(shù)的代碼,另外,A .B是我定義的兩個(gè)類,分別含有數(shù)據(jù)成員ma,mb和mc, 我有疑惑的地方就在于用printf輸出和我注釋掉的地方,我要查看的是數(shù)據(jù)成員的偏移量,為什么用cout(注釋掉的地方)沒有任何輸出,但是用printf卻可以正確輸出呢,不理解,求指教。。 int main() { A a; B *pb=(B*)(&a); cout<<"&a:"<<&a<<endl; cout<<"&a.ma"<<&a.ma<<endl; printf("%p\n",&A::ma); printf("%p\n",&A::mb); printf("%p\n",&B::mc); /* cout<<"&A::ma"<<&A::ma<<endl; cout<<"&A::mb"<<&A::mb<<endl; cout<<"&B::mc"<<&B::mc<<endl; */ pb->print(); } |
木蟲 (小有名氣)
|
第一:你的描述有錯(cuò)誤。用cout不是沒有任何輸出,而是有一個(gè)“1”的輸出 第二:&A::ma實(shí)際上是一個(gè)指向成員的指針類型,而不是一個(gè)普通指針類型。如果你使用VS2010編譯器的話,寫成cout<<(int)(&A::ma)<<endl即可,編譯器就會(huì)告訴你: error C2440: “類型轉(zhuǎn)換”: 無法從“int A::* ”轉(zhuǎn)換為“int” 但是如果你用gcc4.9.8做類型轉(zhuǎn)換就不會(huì)報(bào)錯(cuò),而且會(huì)輸出你想要的結(jié)果,也就是偏移量。編譯器有區(qū)別原因我只能猜測為制造者的因素,而非C++標(biāo)準(zhǔn)的因素。 所以,你在5樓的說法是不對(duì)的,因?yàn)閏out是沒有針對(duì)成員指針進(jìn)行重載的。因此對(duì)于cout<<&A::ma這樣的代碼,編譯器只好將&A::ma轉(zhuǎn)換成其能夠匹配的類型。成員指針類型將被轉(zhuǎn)化為bool型,且非空指針(空指針不是指向0位置的指針,而是不指向任何位置的指針)都將被轉(zhuǎn)為true,而用cout輸出true自然就是1。關(guān)于成員指針向bool轉(zhuǎn)換,無論C++98標(biāo)準(zhǔn),還是11標(biāo)準(zhǔn),4.10節(jié)都說的非常清楚。 |
金蟲 (小有名氣)
|
好的,下面是完整程序 #include<iostream> using namespace std; class A{ public: A(){ ma=1; mb=2; } ~A(){}; void print(){cout<<ma<<mb<<endl;} int ma,mb; }; class B{ public: B(){mc=3;} ~B(){} void print(){cout<<mc<<endl;} int mc; }; int main() { A a; B *pb=(B*)(&a); /* cout<<"&a:"<<&a<<endl; cout<<"&a.ma"<<&a.ma<<endl; printf("%p\n",&A::ma); printf("%p\n",&A::mb); printf("%p\n",&B::mc); */ cout<<"&A::ma"<<&A::ma<<endl; cout<<"&A::mb"<<&A::mb<<endl; cout<<"&B::mc"<<&B::mc<<endl; pb->print(); } 謝謝關(guān)注。望解答 |
至尊木蟲 (著名寫手)
驃騎將軍

金蟲 (小有名氣)
木蟲 (小有名氣)
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 材料求調(diào)劑 +5 | @taotao 2026-03-21 | 5/250 |
|
|---|---|---|---|---|
|
[考研] 材料工程專碩 348分求調(diào)劑 +3 | 冬辭. 2026-03-17 | 5/250 |
|
|
[考研] 一志愿南大,0703化學(xué),分?jǐn)?shù)336,求調(diào)劑 +3 | 收到VS 2026-03-21 | 3/150 |
|
|
[考研] 297求調(diào)劑 +3 | 喜歡還是不甘心 2026-03-20 | 3/150 |
|
|
[考研] 317求調(diào)劑 +9 | 申子申申 2026-03-19 | 15/750 |
|
|
[考研] 求調(diào)劑 +6 | Mqqqqqq 2026-03-19 | 6/300 |
|
|
[考研] 085700資源與環(huán)境308求調(diào)劑 +12 | 墨墨漠 2026-03-18 | 13/650 |
|
|
[考研] 274求調(diào)劑 +10 | S.H1 2026-03-18 | 10/500 |
|
|
[考研] 材料專碩英一數(shù)二306 +7 | z1z2z3879 2026-03-18 | 7/350 |
|
|
[考研] 一志愿中海洋材料工程專碩330分求調(diào)劑 +8 | 小材化本科 2026-03-18 | 8/400 |
|
|
[考研] 330求調(diào)劑 +4 | 小材化本科 2026-03-18 | 4/200 |
|
|
[考研] 求調(diào)劑 +3 | @taotao 2026-03-20 | 3/150 |
|
|
[考研] 086500 325 求調(diào)劑 +3 | 領(lǐng)帶小熊 2026-03-19 | 3/150 |
|
|
[考研] 環(huán)境工程調(diào)劑 +9 | 大可digkids 2026-03-16 | 9/450 |
|
|
[考研] 286求調(diào)劑 +6 | lemonzzn 2026-03-16 | 10/500 |
|
|
[考研] 材料考研調(diào)劑 +3 | xwt。 2026-03-19 | 3/150 |
|
|
[考研] 085601專碩,總分342求調(diào)劑,地區(qū)不限 +5 | share_joy 2026-03-16 | 5/250 |
|
|
[考研] 生物學(xué)071000 329分求調(diào)劑 +3 | 我愛生物生物愛?/a> 2026-03-17 | 3/150 |
|
|
[考研]
|
zhouzhen654 2026-03-16 | 3/150 |
|
|
[考研] 070300化學(xué)學(xué)碩求調(diào)劑 +6 | 太想進(jìn)步了0608 2026-03-16 | 6/300 |
|