我注意到,鐺++包括一個缺少的標頭 - <limits>
在Mac上,而g ++在Linux上顯示它的錯誤。現在我想知道爲什麼鐺做到這一點,而gcc沒有。而我如何強制鐺不這樣做。爲什麼Mac上的鐺會自動包含一些缺失的標題?
這裏是一個示例代碼,在Mac上編譯通過鐺,而不是由GCC在Linux上:
#include <iostream>
using namespace std;
int main()
{
cout << "int max: " << numeric_limits<int>::max() << endl;
}
UPD
我看着圖書館,這裏是我找到。
內部<iostream>
包括<istream>
,它定義了>>
運算符的不同類型。 <istream>
想要知道short
,int
和streamsize
類型的限制。
鐺++使用的libC++標準庫,它使用從<limits>
std::numeric_limits
類模板<istream>
用於這一目的。這就是包含<iostream>
時自動包含此標題的原因。
克++使用的libstdC++標準庫,其使用從<ext/numeric_traits.h>
代替<istream>
(<bits/istream.tcc>
)使用<limits>
__gnu_cxx::__numeric_traits
類模板。還有在頭這就解釋了爲什麼他們不使用<limits>
評論:
<limits>
大,我們避免包括它
使用編譯器:
> clang++ --version
Apple LLVM version 8.0.0 (clang-800.0.42.1)
$ g++ --version
g++ (Debian 4.9.2-10) 4.9.2
我在這裏問了一個跟進問題:http://stackoverflow.com/questions/41214159/is-there-any-way-to-know-which-headers-are-automatically-included-in-c –