Почему мне не нужно включать заголовки STL в gcc 4.6? - PullRequest
2 голосов
/ 28 октября 2011

Я использую gcc 4.6 в режиме c ++ 0x.Я заметил, что я не получаю никаких ошибок компилятора, если я использую векторы и другие контейнеры STL, но не включаю связанные с ними заголовочные файлы.Это было задумано?Какова предпочтительная практика?

Я всегда использую явное указание пространства имен std ... но я всегда думал, что заголовок нужно было включать, даже если пространство имен указано.

Это похоже настранное значение по умолчанию, если желательно включать заголовки, так как сомнительно, что я все сделаю правильно в 100% случаев без помощи компилятора.

Ответы [ 2 ]

3 голосов
/ 28 октября 2011

Опция -H, заданная для GCC (т.е. в вашем случае g++), заставляет GCC печатать каждый заголовок, который он включает. Это может помочь вам выяснить, как файл был включен (то есть, из какого другого заголовка). И я не думаю, что GCC волшебным образом включает некоторые заголовки stdc ++.

3 голосов
/ 28 октября 2011

Вы всегда должны включать все стандартные заголовки, которые нужны вашему коду.

К сожалению, к стандартным заголовкам разрешено включать другие стандартные заголовки, и в этом случае вы можете использовать что-то, не включая правильный заголовок. Вы не можете полагаться на это, и вы можете обнаружить, что вам нужно исправить свои включения, если вы переключитесь на другую реализацию библиотеки.

Нет простого способа убедиться, что вы всегда правильно указали свои включения; самый простой вариант - проверить, что ваш код компилируется со всеми интересующими вас реализациями библиотеки.

...