Ну вот:
#include <iostream>
int main()
{
std::endl(std::operator<<(std::cout, "Hello world!"));
}
Написав это таким образом, мы избегаем подверженных ошибкам ADL вместе с использованием директив и объявлений.
Это должно быть саркастическим ответом. :-D
Я с Хербом Саттером из-за Google. Из C ++ Стандарты кодирования:
Вы можете и должны использовать пространство имен, используя объявления и директивы свободно в ваших файлах реализации после директив #include, и вам это приятно. Несмотря на неоднократные утверждения об обратном, пространства имен, использующие декларации и директивы, не являются злом и не наносят ущерба цели пространств имен. Скорее, именно они делают пространства имен пригодными для использования .
Вы можете зацикливаться на потенциальных конфликтах пространства имен, которые, вероятно, никогда не проявятся, и, вероятно, их не будет трудно исправить в таком астрономически редком событии, осторожно избегая using
директив и явно указывая каждую вещь, которую вы используете (вплоть до операторов) с using
объявлениями, или просто идти вперед и начать using namespace std
. Я рекомендую последний с точки зрения производительности.
Большинство учебников по c ++ обучают новичков использованию пространства имен std; они распространяют плохую практику кодирования?
Наоборот, если вы спросите меня, и я считаю, что Саттер выше соглашается.
Теперь, в течение моей карьеры, я столкнулся примерно с 3 конфликтами пространства имен как прямой результат using
директив в кодовых базах, охватывающих десятки миллионов LOC. Однако во всех трех случаях они были в исходных файлах, которые занимали более 50000 строк устаревшего кода, первоначально написанного на C, а затем подвергнутого разбору на C ++, выполняющего огромный эклектичный список разрозненных функций, включая заголовки из дюжины различных библиотек и имеющие эпический список того, #includes
что охватило всю страницу. Несмотря на эпический беспорядок, их было не слишком сложно исправить, поскольку они вызывали ошибки сборки на OSX (единственной ОС, где код не удалось собрать), а не ошибки времени выполнения. Не организовывайте свой код таким кошмарным образом, и все будет в порядке.
Тем не менее, во избежание обе using
директивы и объявления в заголовочных файлах. Это просто отсталый. Но для исходных файлов, особенно для тех, у которых нет целой страницы, заполненной #include
директивами, я бы сказал, не переживайте, если вы не работаете в Google.