Использование безымянного пространства имен в C++
когда можно использовать Безымянное пространство имен в C++ ? Это лучше в любом смысле, чем функция свободного стояния? Кроме того, он должен использоваться только в исходном файле, а не в заголовочном файле?
5 ответов:
согласно Stroustrup, вы должны использовать его в местах, где в старом C вы бы сделали
static
глобалы. Идея заключается в том, что рассматриваемые элементы могут быть "глобальными" для исходного файла, в котором они находятся, но не загрязнять пространство имен любых других исходных файлов в вашей компиляции.другими словами, вы не должны создавать
static
глобальные переменные в C++. Вместо этого вы должны использовать безымянные пространства имен.Я нашел некоторые ситуации, в которых они полезны заголовочные файлы, но это должно быть редко. В основном, я думаю, что для того, чтобы объявить забрасываемых исключения. В этом случае рассматриваемые определения будут глобальными для всего, что
#include
это заголовок, но не для вещей, которые этого не делают.
Безымянное пространство имен является частным для единицы перевода, и его можно использовать для защиты глобальных переменных и функций с одинаковыми именами, встречающимися в разных единицах перевода, чтобы не возникало конфликтов ссылок.
CModuleLock. Если он не находится в безымянном пространстве имен и некоторых других .cpp файл случайно имеет другой классCModuleLock
не в безымянном пространстве имен вы не сможете связать свою программу.
Он используется для сокрытия имени. Каждое Безымянное пространство имен уникально. Ссылка здесь объясняет более подробно. Он обычно используется в исходном файле, чтобы скрыть функции, которые должны иметь только внутреннюю связь (например, не подвержены воздействию внешнего мира).
безымянные пространства имен являются "версией C++" глобальных статических переменных и функций. Обратите внимание, что вы также можете использовать Безымянное пространство имен для классов.
в основном, пространство имен решает конфликты между теми же классами имен, идентификаторами и функциями.для получения более подробной информации нажмите на ссылку ниже https://simplifiedtutorial4u.blogspot.in/2017/08/what-is-namespace-in-c.html