Geschachtelte anonyme namespace?
Wenn Sie eine anonyme namespace gibt es irgendwelche Probleme, wenn es verschachtelt in einem anderen Namensraum? Zum Beispiel gibt es tatsächlich einen Unterschied zwischen Foo1.cpp und Foo2.cpp in den folgenden code:
//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();
}
}
- Exportierte Symbole werden anders. Schauen Sie einem nm-Ausgabe.
- Nur um pedantisch zu werden, der Fachbegriff ist
unnamed namespace
nicht anonym. - Gewerkschaften sind anonym, namespace Unbenannte. Aber who cares 🙂
- Uns C++ Pedanten tun.
- Während der Begriff ist
unnamed
, wenn Sie überprüfen Sie mitnm
odergdb
unter den tools nennen esanonymous namespace
, so dass die Verwirrung ist verständlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anonymen namespace könnte als eine normale Namensraum mit eindeutigen Namen, die Sie nicht kennen. Laut C++ - Standard 7.3.1.1:
Gibt es keine weiteren Probleme.
Wahrscheinlich keinen wirklichen Unterschied für Ihre Zwecke. Es macht einen Unterschied, wo in Ihrer cpp-Datei
privateFunction
sichtbar ist. Wenn Sie hinzufügenvoid barFunc() { privateFunction(); }
am Ende beider Dateien, dann Foo2.cpp kompiliert und Foo1.cpp nicht.Normalerweise würden Sie nicht definieren externen Symbole aus vielen verschiedenen namespaces in der gleichen cpp-Datei, so dass der Unterschied nicht kommen.
namespace Foo {}
"?