在研究this question的示例代碼時,我認爲這是未定義的行爲,它妨礙了打印後續使用std::cout
。但事實證明,這是其無法運作的真正原因。因此,我現在好奇是否爲未定義的行爲(試圖)打印空指針。所以這裏是我的問題:正在打印空指針未定義的行爲?
它是未定義行爲打印空指針?如果是這樣,那麼會造成這種情況的流式插入器是什麼?我非常確定插入器足夠聰明,不能解引用空指針。
我也想知道爲什麼插件在遇到空指針的時候設置錯誤掩碼(特別是
badbit
)。爲什麼它不把它當作字符串文字的終止?
我沒有一個標準的方便,我只發現一個來源到目前爲止,不幸導致一個死鏈接。
libstdC++在不需要時可能會執行額外的'nullptr'檢查。當你使用clang + libC++構建程序時,[seg faults](http://coliru.stacked-crooked.com/a/2078b21d2ce9050d)。但不是與鏗鏘+ libstdC++ – Praetorian
「我敢肯定,插件是足夠聰明,不能解除引用空指針。」 - 一般來說,C++標準說明了編譯器必須做什麼以及其他任何事情,他們不需要做。它會減慢正確編碼的程序在每次調用operator <<(char *)'之前執行額外的NULL檢查。 –
@MattMcNabb:lol我不認爲在處理像C++ I/O流那樣慢的事情時,空檢查的速度是一個問題。 – Mehrdad