| 查看: 2199 | 回復(fù): 11 | ||
[求助]
c++ 一道題目,關(guān)于cout 和printf的差異,不理解(p82) 已有4人參與
|
||
|
下面是主函數(shù)的代碼,另外,A .B是我定義的兩個類,分別含有數(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(); } |
木蟲 (小有名氣)
|
第一:你的描述有錯誤。用cout不是沒有任何輸出,而是有一個“1”的輸出 第二:&A::ma實(shí)際上是一個指向成員的指針類型,而不是一個普通指針類型。如果你使用VS2010編譯器的話,寫成cout<<(int)(&A::ma)<<endl即可,編譯器就會告訴你: error C2440: “類型轉(zhuǎn)換”: 無法從“int A::* ”轉(zhuǎn)換為“int” 但是如果你用gcc4.9.8做類型轉(zhuǎn)換就不會報(bào)錯,而且會輸出你想要的結(jié)果,也就是偏移量。編譯器有區(qū)別原因我只能猜測為制造者的因素,而非C++標(biāo)準(zhǔn)的因素。 所以,你在5樓的說法是不對的,因?yàn)閏out是沒有針對成員指針進(jìn)行重載的。因此對于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ā)表 | |
|---|---|---|---|---|
|
[考研] 286分人工智能專業(yè)請求調(diào)劑愿意跨考! +4 | lemonzzn 2026-03-17 | 8/400 |
|
|---|---|---|---|---|
|
[考研] 求調(diào)劑 +4 | 要好好無聊 2026-03-21 | 4/200 |
|
|
[考研] 0703化學(xué)調(diào)劑 +4 | 妮妮ninicgb 2026-03-21 | 4/200 |
|
|
[考研] 求調(diào)劑 +3 | 13341 2026-03-20 | 3/150 |
|
|
[考研] 336求調(diào)劑 +5 | rmc8866 2026-03-21 | 5/250 |
|
|
[考研] 生物學(xué)一志愿985,分?jǐn)?shù)349求調(diào)劑 +3 | zxts12 2026-03-21 | 3/150 |
|
|
[考研] 22 350 本科985求調(diào)劑,求老登收留 +3 | 李軼男003 2026-03-20 | 3/150 |
|
|
[考研] 求調(diào)劑 +3 | 白QF 2026-03-21 | 3/150 |
|
|
[考研] 346求調(diào)劑[0856] +4 | WayneLim327 2026-03-16 | 7/350 |
|
|
[考研] 083200學(xué)碩321分一志愿暨南大學(xué)求調(diào)劑 +3 | innocenceF 2026-03-17 | 3/150 |
|
|
[考研] 一志愿中海洋材料工程專碩330分求調(diào)劑 +8 | 小材化本科 2026-03-18 | 8/400 |
|
|
[考研] 323求調(diào)劑 +3 | 洼小桶 2026-03-18 | 3/150 |
|
|
[考研] 求調(diào)劑 +3 | eation27 2026-03-20 | 3/150 |
|
|
[考研] 求調(diào)劑 +3 | 暗涌afhb 2026-03-16 | 3/150 |
|
|
[考研] 081700化工學(xué)碩調(diào)劑 +3 | 【1】 2026-03-16 | 3/150 |
|
|
[考研] 085601材料工程專碩求調(diào)劑 +10 | 慕寒mio 2026-03-16 | 10/500 |
|
|
[考研] 312求調(diào)劑 +8 | 陌宸希 2026-03-16 | 9/450 |
|
|
[考研] 材料,紡織,生物(0856、0710),化學(xué)招生啦 +3 | Eember. 2026-03-17 | 9/450 |
|
|
[考研] 290求調(diào)劑 +3 | p asserby. 2026-03-15 | 4/200 |
|
|
[考研] [導(dǎo)師推薦]西南科技大學(xué)國防/材料導(dǎo)師推薦 +3 | 尖角小荷 2026-03-16 | 6/300 |
|