後,如果我寫這樣的代碼:忽略參數NULL
const char * b = NULL;
std::cout << "Hello!" << b;
我得到這樣的輸出:
Hello!
不過,如果我更改爲:
const char * b = NULL;
std::cout << b << "Hello!";
我得不到任何輸出,所以我很好奇。
我猜可能是cout的< <運算符讀取直到NULL,所以它後面的所有內容都會被忽略,但是不知道是否有人可以給我更多關於它的信息。
後,如果我寫這樣的代碼:忽略參數NULL
const char * b = NULL;
std::cout << "Hello!" << b;
我得到這樣的輸出:
Hello!
不過,如果我更改爲:
const char * b = NULL;
std::cout << b << "Hello!";
我得不到任何輸出,所以我很好奇。
我猜可能是cout的< <運算符讀取直到NULL,所以它後面的所有內容都會被忽略,但是不知道是否有人可以給我更多關於它的信息。
經營者有一個前提條件:
要求:
s
不得空指針。
通過打破此前提條件,您會導致未定義的行爲。什麼事情都可能發生。
(如在評論中提到,一個流行的實現將在這種情況下,這可以解釋你看到的行爲failbit
和badbit
但是,這不是你可以依靠。)
[而且,實際上,GCC(而不是libstdC++)設置badbit ](http://stackoverflow.com/a/7019483/560648)。 – 2014-12-05 15:32:08
@LightnessRacesinOrbit:這很有趣,並解釋了觀察到的行爲。但絕對不能依賴。 – 2014-12-05 15:33:16
[它也會在GCC上設置'badbit'](http://ideone.com/B06vm0) – 0x499602D2 2014-12-05 15:35:40
的可能重複:是印刷一個空指針未定義的行爲?](http://stackoverflow.com/questions/23283772/is-printing-a-null-pointer-undefined-behavior) – 0x499602D2 2014-12-05 15:32:30