Разве неправильно использовать C++ с помощью ключевого слова в заголовочном файле?

Мне сказали, что это плохо, чтобы иметь "пространство имен ns123 использования" в заголовочном файле, но я не могу помнить, какова приведенная причина была. Это - на самом деле плохая вещь сделать, и почему?

11
задан Mr. Boy 9 February 2010 в 21:03
поделиться

5 ответов

Это плохая практика, в общем, потому что она противоречит цели пространств имен. Определяя в заголовке, вы не обеспечиваете строгий контроль над областью объявления using, а это означает, что вы можете столкнуться с конфликтами имен в неожиданных местах.

25
ответ дан 3 December 2019 в 01:06
поделиться

If you put a using declaration in a header file, anything that #includes 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.

16
ответ дан 3 December 2019 в 01:06
поделиться

Вытягивание всех классов и функций из их пространства имен, как правило, плохая идея и фактически противоречит концепции наличия пространств имен ... обычно лучше использовать 'using' в конкретном классе или функции.

3
ответ дан 3 December 2019 в 01:06
поделиться

Обычное программирование на C ++

Да, часто есть места, где это имеет смысл, и вы можете контролировать, где и как вы используете свои тычинки. Если это программа с ограниченным объемом, вам не нужно беспокоиться о размещении в глобальном масштабе.

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

  1. ::
  2. :: имя компании
  3. :: имя компании :: компонент
  4. :: имя компании :: компонент :: субкомпонент.

Я бы сказал, что вполне приемлемо начинать с использования операторов на уровне 3 или 4 - вот где шансы коллизий становятся очень низкими.

Generic / TMP Programming

В общем программировании и TMP использование часто используется для настройки ваших библиотек для определенного домена, и это часто делается с помощью операторов using.

1
ответ дан 3 December 2019 в 01:06
поделиться

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

1
ответ дан 3 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: