Ось вам:
#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. Однак у всіх 3 випадках вони знаходились у вихідних файлах, що налічували понад 50 000 рядків спадкового коду, спочатку написаних на C, а потім утисків на C ++, виконуючи величезний еклектичний список розрізнених функцій, включаючи заголовки з десятка різних бібліотек, і епічний список, #includesякий охоплював сторінку. Незважаючи на епічний безлад, виправити їх було не так складно, оскільки вони спричинили помилки збирання в OSX (тієї ОС, де код не вдалося створити), а не помилок виконання. Не організовуйте свій код таким кошмарним способом, і вам слід добре.
Однак, уникайте обох using директив та декларацій у файлах заголовків. Це просто затримка. Але для вихідних файлів, особливо тих, на яких ціла сторінка не заповнена #includeдирективами, я б сказав, що не переглядайте її, якщо ви не працюєте в Google.