Использование безымянного пространства имен в C++


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

5 66

5 ответов:

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

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

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

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

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

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

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

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