In C++ macht die Verknüpfung einer Funktion oder einer Variablen in einem anonymen Namespace die Verknüpfung intern, d. e. das gleiche wie deklariert es static
auf einer Dateiebene, aber idiomatische C++.Verknüpfung von Symbolen in anonymen Namespace innerhalb eines regulären Namespaces
Was ist mit einem anonymen Namespace in einem normalen Namespace? Garantiert es noch interne Verbindungen?
// foo.cpp
void func1() {
// external linkage
}
static void func2() {
// internal linkage
}
namespace {
void func3() {
// internal linkage
}
}
namespace ns1 {
void func4() {
// external linkage
}
namespace {
void func3() {
// still internal linkage?
}
}
}
Falsche Annahme. Variablen innerhalb eines Anonymen-Namespace haben eine externe Verknüpfung, sofern sie nicht als "statisch" deklariert sind. – MSalters
@MSalters: Ich denke, mit C++ 11 hat sich das geändert. '§ 3.5/4: Ein unbenannter Namespace oder ein Namespace, der direkt oder indirekt in einem unbenannten Namespace deklariert ist, hat eine interne Verknüpfung. Alle anderen Namespaces haben eine externe Verknüpfung. – legends2k
@ legends2k: Das ist Teil einer anderen Änderung, die diese Namen als Template-Argumente gültig gemacht hat (In C++ 03 benötigten Template-Argumente externe Verknüpfungen, die von in einem anonymen Namespace definierten Konstanten erfüllt wurden) – MSalters