在我們學習使用構造函數和析構函數之前很久,我們學習了很多使用printf()
的知識。因此,當切換到C++時,許多控制檯將輸出printf()
。爲什麼不在C++中使用printf()
有時候你可以聽到:
printf()
是壞的,你應該使用cout <<
相反,因爲它是C++
什麼是使用printf()
放棄並切換到cout <<
的優勢呢?
在我們學習使用構造函數和析構函數之前很久,我們學習了很多使用printf()
的知識。因此,當切換到C++時,許多控制檯將輸出printf()
。爲什麼不在C++中使用printf()
有時候你可以聽到:
printf()
是壞的,你應該使用cout <<
相反,因爲它是C++
什麼是使用printf()
放棄並切換到cout <<
的優勢呢?
C++ faq指出:
[15.1]我爲什麼要使用
<iostream>
代替傳統<cstdio>
?增加類型安全性,減少錯誤,允許擴展性並提供可繼承性。 012fprintf()可以說沒有被破壞,並且儘管容易出錯,但scanf()也許是可居住的,但是對於C++ I/O的功能而言,兩者都是有限的。 C++ I/O(使用< <和>>)是相對於C(使用
printf()
和scanf()
)。
更多類型安全:隨着
<iostream>
,對象被I/O的類型是由編譯器靜態地已知的。相反,使用「%
」字段來動態地確定類型。不易出錯:使用
<iostream>
時,沒有多餘的「%
」令牌必須與實際的I/O對象一致。刪除冗餘可消除一類錯誤。可擴展:C++
<iostream>
機制允許新的用戶定義類型在不破壞現有代碼的情況下進行I/O。想象一下,如果每個人都同時爲printf()和scanf()添加新的不兼容「%
」字段,那麼混亂就會發生?可繼承:C++的
<iostream>
機構從真實的類,如std::ostream
和std::istream
建造。不像<cstdio>
的FILE*
,這些是真實的類,因此是可繼承的。這意味着你可以擁有其他用戶定義的東西,看起來像流一樣,但它可以做任何你想要的奇怪和美妙的事情。您將自動使用由您甚至不知道的用戶編寫的大量I/O代碼行,並且他們不需要知道您的「extended stream
」類。
cout
是更加面向對象的,並提供一些優點。但我是一位老派開發人員,對printf()
非常滿意。雖然,我現在不寫很多控制檯應用程序,但如果我這樣做,我很可能會使用printf()
。
這是一件好事:你可以選擇你最喜歡的一個。
而且,在大多數情況下,printf()方法*比* >>操作符的連續序列更具可讀性。通常,您可以查看printf()格式的字符串並查看輸出的格式。實際上,您可以將printf()格式的字符串視爲與格式化輸出的問題域匹配的「域特定語言」。從這個意義上說,C++ I/O是一個巨大的後退步驟 - 你不能瀏覽所有那些'>>'運算符,並快速瞭解輸出的結果。 C++ I/O是一個失敗的實驗,恕我直言。要喜歡它,你必須專注於類型安全,並忽略你放棄的一切...... –
它是類型安全的。 – SLaks
@SLaks:即使您在使用'printf'進行類型錯誤時,體面的編譯器也會發出診斷信息。 – 6502