Когда использование анонимного пространства имен является там какими-либо проблемами, если оно вкладывается в другом пространстве имен? Например, есть ли любая реальная разница между Foo1.cpp и Foo2.cpp в следующем коде:
// Foo.h
namespace Foo
{
void fooFunc();
}
// Foo1.cpp
namespace Foo
{
namespace
{
void privateFunction()
{
...
}
}
void fooFunc()
{
privateFunction();
}
}
// Foo2.cpp
namespace
{
void privateFunction()
{
...
}
}
namespace Foo
{
void fooFunc()
{
privateFunction();
}
}
Анонимное пространство имен можно рассматривать как нормальное пространство имен с уникальным именем, которое вы не знаете. Согласно стандарту C ++ 7.3.1.1:
An Безмятенные-пространство имен-определение, как если бы он был заменен на
пространство имен уникальным {/ * пустое тело * /} используя пространство имен уникальным; Пространство имен уникально {пространство имен-тело}
Если все вхождения уникальных в единице перевода заменяются одним и тем же идентификатором, и этот идентификатор отличается от всех других идентификаторов во всей программе.
Нет дополнительных проблем.
, вероятно, не реальная разница для ваших целей. Это имеет значение, где в вашем файле CPP видима
. Если вы добавите void barfunc () {padifunction (); }
К концу обоих файлов, то foo2.cpp компилирует и foo1.cpp не.
Обычно вы не будете определять внешние символы от многих различных пространств имен в том же файле CPP, поэтому разница не придет.