Мне сказали, что это плохо, чтобы иметь "пространство имен ns123 использования" в заголовочном файле, но я не могу помнить, какова приведенная причина была. Это - на самом деле плохая вещь сделать, и почему?
Это плохая практика, в общем, потому что она противоречит цели пространств имен. Определяя в заголовке, вы не обеспечиваете строгий контроль над областью объявления using, а это означает, что вы можете столкнуться с конфликтами имен в неожиданных местах.
If you put a using
declaration in a header file, anything that #include
s the header file also has the namespace imported, whether they want it or not. This violates the principle of least surprise and defeats the purpose of namespaces by allowing changing an #include
statement to easily cause a naming collision. If you want to import a namespace in your own .cpp file to save a little typing and produce more readable code, that's fine. Just don't force users of your module to do the same.
Вытягивание всех классов и функций из их пространства имен, как правило, плохая идея и фактически противоречит концепции наличия пространств имен ... обычно лучше использовать 'using' в конкретном классе или функции.
Обычное программирование на C ++
Да, часто есть места, где это имеет смысл, и вы можете контролировать, где и как вы используете свои тычинки. Если это программа с ограниченным объемом, вам не нужно беспокоиться о размещении в глобальном масштабе.
Для монолитных приложений я бы настоятельно рекомендовал не размещать использования в очень загруженном пространстве имен - поскольку коллизии сведут вас с ума, когда вы совершите фиксацию. Например:
Я бы сказал, что вполне приемлемо начинать с использования операторов на уровне 3 или 4 - вот где шансы коллизий становятся очень низкими.
Generic / TMP Programming
В общем программировании и TMP использование часто используется для настройки ваших библиотек для определенного домена, и это часто делается с помощью операторов using.
Это часто будет давать вам странные и загадочные ошибки компиляции, например, где вы можете провести часы, пытаясь выяснить корень проблемы.