Когда можно использовать неназванное пространство имен в С++? Это лучше в любом смысле, чем функция свободного стояния? Кроме того, следует ли использовать его только в исходном файле, а не в файле заголовка?
Использование неназванного пространства имен в С++
Ответ 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