2014-12-05 229 views
0

後,如果我寫這樣的代碼:忽略參數NULL

const char * b = NULL; 
std::cout << "Hello!" << b; 

我得到這樣的輸出:

Hello!

不過,如果我更改爲:

const char * b = NULL; 
std::cout << b << "Hello!"; 

我得不到任何輸出,所以我很好奇。

我猜可能是cout的< <運算符讀取直到NULL,所以它後面的所有內容都會被忽略,但是不知道是否有人可以給我更多關於它的信息。

+0

的可能重複:是印刷一個空指針未定義的行爲?](http://stackoverflow.com/questions/23283772/is-printing-a-null-pointer-undefined-behavior) – 0x499602D2 2014-12-05 15:32:30

回答

4

經營者有一個前提條件:

要求:s不得空指針。

通過打破此前提條件,您會導致未定義的行爲。什麼事情都可能發生。

(如在評論中提到,一個流行的實現將在這種情況下,這可以解釋你看到的行爲failbitbadbit但是,這不是你可以依靠。)

+2

[而且,實際上,GCC(而不是libstdC++)設置badbit ](http://stackoverflow.com/a/7019483/560648)。 – 2014-12-05 15:32:08

+0

@LightnessRacesinOrbit:這很有趣,並解釋了觀察到的行爲。但絕對不能依賴。 – 2014-12-05 15:33:16

+0

[它也會在GCC上設置'badbit'](http://ideone.com/B06vm0) – 0x499602D2 2014-12-05 15:35:40