我理解的是這並不屬於C++語言本身,但是寫程序的時候都會用到它們。那麼請問除去C++標準,這門語言本身還剩下什麼呢?


「istream和ostream這樣的類定義位於iostream文件」,這個問題分兩邊說。

istream/ostream這兩個類在C++標準中有規定,肯定是C++語言的一部分,包括iostream這個頭文件也是C++標準中的一部分。但是C++標準中並沒有規定編譯器如何實現頭文件以及這個類本身,C++標準只是規定了它需要有。

所以實用的C++語言實際上分成三部分,C++標準,C++實現(編譯器/鏈接器,標準庫實現,編譯器擴展庫等等工具和需要編譯器支持的庫),第三方庫(包括操作系統SDK,其它不需要編譯器支持的功能庫,比如說QT,Boost等)。


語言就是標準定義的

除去標準,還剩啥?沒了啊


語言(或者說編譯器)本身和istream這樣的頭文件,它們的關係類似於數學上的公理和定理的關係。前者是規定好的,後者是從前者推導出來的,你當然也可以自己來推導,不過大部分人都會直接拿來用。


標準規定了語言應當如何被編譯器實現,雖然有些實現在標準中沒有硬性規定而由各編譯器自由決定,但這是因為核心部分已經由標準規定好了,其餘的「無關痛癢」。因此如果去除標準,語言也就不存在了。

如果感覺太抽象,可以把標準看一遍,就知道標準里到底有什麼了,也就知道去除它語言還剩下什麼了


除去C++標準還剩什麼?還剩代碼啊……

我看你想問的是「除去C++標準庫,這門語言本身還剩下什麼」……

一門語言,無非就是文字上的標準規範,還有代碼(可以分為底層一點的編譯器提供的代碼,還有高層一點大家平時寫的代碼)。有人可能會說到runtime,但runtime的二進位也是代碼編譯出來的。

你用的iostream屬於STL,是C++的標準庫,而C++本身不提供標準庫的代碼,只提供標準庫的規範。iostream其實是編譯器提供的(更嚴格來講有些還不是編譯器自己提供的,像gcc/clang混搭上libstdc++/libc++的情況)。


什麼都沒有就是它的優勢啊,因為在有些環境下,你就是什麼都沒有,連操作系統可能都沒有。


一門語言包括語法和庫,標準就是規定語言語法和庫的規則。沒有標準的語言不能存在。

個人觀點,僅供參考。


推薦閱讀:
相关文章