detail
пространства имен помогают избежать загрязнения официальными внутренними функциями или классами, о которых пользователю не нужно знать.
Современные IDE анализируют файлы заголовков и предоставляют завершение кода, то есть предложения для имен, если вы начнете писать что-то вроде boost::c
. Это было бы совершенно непригодным, если бы внутренние алгоритмы, такие как, например, copy_pod_nontrivial
также будет указан.
Кроме того, опечатка может привести к вызову внутренней функции или объявлению объекта внутреннего типа класса. Это определенно не то, что мы хотим.
Более техническая причина для этого - ADL: некоторые функции находятся по типу их аргументов (также используются аргументы шаблона для шаблонов функций); Это может вызвать поиск имени для поиска имен в официальном пространстве имен. Если в нем объявлены вспомогательные функции (или классы), это может вызвать проблемы с разрешением перегрузки.
Пользователи не должны (должны) использовать эти внутренние функции, поэтому, если вы видите код пользователя, который обращается к пространству имен, равному detail
, вы должны быть настороже.
Консистенция инкапсуляции, так что все, что имеет значение, находится в соответствующем пространстве имен, а не только функция freeroaming – Creris
@Creris, но эта инкапсуляция никоим образом не повлияет на пользователя файла, я прав? – qdii
@qdii Я не понял, что –