Подтвердить что ты не робот

Использование неназванного пространства имен в С++

Когда можно использовать неназванное пространство имен в С++? Это лучше в любом смысле, чем функция свободного стояния? Кроме того, следует ли использовать его только в исходном файле, а не в файле заголовка?

4b9b3361

Ответ 1

Согласно Stroustrup, вы должны использовать его в местах, где в старом C вы сделали бы static globals. Идея состоит в том, что рассматриваемые объекты могут быть "глобальными" в исходном файле, в котором они находятся, но не загрязняют пространство имен любых других исходных файлов в вашей компиляции.

Другими словами, вам не следует создавать static globals в С++. Вместо этого вы должны использовать неназванные пространства имен.

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

Ответ 2

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

Например, вам нужен класс, который будет определен только в файле .cpp и использоваться только внутри этого файла. Вы хотите называть его CModuleLock. Если он не находится в неназванном пространстве имен, а в каком-то другом .cpp файле случайно имеет другой класс CModuleLock не в неназванном пространстве имен, вы не сможете связать свою программу.

Ответ 3

Он используется для скрытия имени. Каждое неназванное пространство имен уникально. Ссылка здесь объясняется более подробно. Обычно он используется в исходном файле для скрытия функций, которые должны иметь только внутреннюю связь (например, не подвергаться внешнему миру).

Ответ 4

Пространства имен представляют собой "С++-версию" глобальных статических переменных и функций. Обратите внимание, что вы также можете использовать неназванное пространство имен для классов.

Ответ 5

В основном, пространство имен разрешает конфликты между теми же классами имен, идентификаторами и функцией. Для получения дополнительной информации нажмите на ссылку, приведенную ниже. https://simplifiedtutorial4u.blogspot.in/2017/08/what-is-namespace-in-c.html