Анонимное пространство имен похоже на статическое ключевое слово, когда оно применяется на глобальном уровне.
Благодаря анонимному пространству имен вы не можете вызывать что-либо внутри пространства имен из другого файла.
Анонимные пространства имен позволяют ограничить область действия только текущим файлом.
Программист сделал бы это, чтобы избежать конфликтов имен. Никакие глобальные имена не будут конфликтовать таким образом в момент соединения .
Пример:
Файл: test.cpp
namespace
{
void A()
{
}
void B()
{
}
void C()
{
}
}
void CallABC()
{
A();
B();
C();
}
Файл: main.cpp
void CallABC();//You can use ABC from this file but not A, B and C
void A()
{
//Do something different
}
int main(int argc, char** argv)
{
CallABC();
A();//<--- calls the local file's A() not the other file.
return 0;
}
Выше будет хорошо скомпилировано. Но если вы попытаетесь написать функцию CallABC()
в своем основном файле, у вас будет ошибка компоновки.
Таким образом, вы не можете вызывать функции A()
, B()
и C()
по отдельности, но вы можете вызвать CallABC()
, который вызовет их все по порядку.
Вы можете переслать объявление CallABC()
в вашем main.cpp и вызвать его. Но вы не можете переслать декларацию test.cpp's A (), B () или C () внутри вашего main.cpp, так как у вас будет ошибка компоновки.
Что касается того, почему внутри пространства имен есть класс. Чтобы убедиться, что внешние файлы не используют этот класс. Что-то внутри .cpp, вероятно, использует этот класс.