回覆列表
-
1 # 幸福學院
-
2 # 南風微涼歲月清茶
我認為cout是類ostream的物件,而ostream的定義是typedefbasic_ostream<char>ostream,顯然ostream類是類模板basic_ostream的一個例項,ostream操作物件都是char型別。那麼cout作為類ostream的例項,必然也是以char為預設操作物件。從人的使用習慣來看也是一樣,既然呼叫了cout一般是為了輸出字元而不是一個地址。如果你是cout的開發者肯定首先想到的是輸出字串,而不是一個地址。
C++裡cout太自作聰明瞭,為了省去我們迴圈輸出字元的麻煩,cout<<p<<endl;被翻譯為輸出p指向的字串值。這個時候要輸出p的指標值就只能先將其轉為void *再輸出。因為void型, cout沒法輸出,只能乖乖輸出指標。此外cout<<&p<<endl;是不可取的,它其實等效printf("%p/n",&p)。
命令如下:void main(){char *p2="abcd";cout<<*p2<<endl;cout<<p2<<endl;printf("%p/n",&p2);cout<<&p2<<endl;void *p=p2;cout<<p<<endl;}輸出結果如下:0046F020才是p的值,0013FF7C實際為&p.aabcd0013FF7C0013FF7C0046F020Press any key to continue