2011-10-28 44 views
2

我在C++ 0x模式下使用gcc 4.6。我注意到,如果我使用矢量和其他STL容器,但不包含它們的關聯頭文件,我似乎沒有得到任何編譯器錯誤。這是由設計?什麼是首選的做法?爲什麼我不需要在gcc 4.6中包含STL頭文件?

我總是使用顯式地指定std命名空間......但我始終認爲,頭有即使指定的命名空間被包括在內。

這似乎是一個奇怪的默認值,如果它最好包括標題,因爲它是值得懷疑的,我會得到的時間正確的事情100%,沒有從編譯器的幫助。

+3

你可能包括他們間接地通過其他頭。 –

+0

檢查您的程序包含的標題,STL標題必須包含在其中一個標題中。 –

+0

啊這是對的,但是維護代碼的最佳做法是什麼?並不總是可以避免在其他頭文件中包含STL頭文件(例如內聯函數等) – daj

回答

3

你應該總是包括所有你的代碼需要的標準頭。

不幸的是,被允許標準的頭,以包括其他標準的頭,在這種情況下,你可能會發現自己能夠使用的東西,而不包括正確的標題。你不能依賴它,如果你改變了不同的庫實現,你可能會發現你必須解決你的包含問題。

有沒有簡單的方法,以確保您始終獲得您的正確包括;最簡單的方法是測試你的代碼的所有庫實現你感興趣的編譯。

3

(即你的情況g++)讓GCC打印頭每次它包括給GCC選項-H 。它可以幫助您瞭解如何包含文件(即從其他標題獲取)。我不認爲GCC是神奇地包含一些stdC++頭文件。

相關問題