Es sieht für mich redundant aus - entweder als statisch deklariert oder in einem anonymen Namespace zu sein bedeutet, dass es eine interne Verknüpfung hat.
§ 3.5 / 3:
Ein Name mit Namensraumbereich (3.3.6) hat eine interne Verknüpfung, wenn es der Name von: ist - eine Variable, Funktion oder Funktionsvorlage, die explizit als statisch deklariert ist;
§ 3.5 / 4:
[...] Ein unbenannter Namespace oder ein Namespace, der direkt oder indirekt in einem unbenannten Namespace deklariert ist, hat eine interne Verknüpfung. [...] Ein Name mit einem Namespace-Bereich, der dies nicht hat oben angegebene interne Verknüpfung hat die gleiche Verknüpfung wie der einschließende Namespace, wenn es der Name von
ist - eine Variable; oder
- eine Funktion; oder
So, wie es jetzt ist, hat es interne Verknüpfungen, weil es explizit als statisch deklariert ist. Wenn es nicht explizit als static deklariert wäre, hätte es eine interne Verknüpfung, weil es in einem unbenannten Namespace deklariert ist. Gleicher Effekt in beide Richtungen.
Beachten Sie, dass ich hier speziell auf eine Funktion antworte - es gibt einige wenige obskure Fälle, in denen es einen Unterschied gibt, wenn Sie mit dem Namen eines Typs (zB class / struct) zu tun haben / union), aber ich weiß nichts von dem, was im Falle einer Funktion zutrifft.
Was die interne Verbindung wirklich bedeutet, das ist einer dieser Orte, an dem der Standard tatsächlich ziemlich direkt und klar ist. Es ist wahrscheinlich am besten, die Definitionen aller drei Möglichkeiten (§ 3.5 / 2) zu zitieren:
Beachten Sie, dass die obigen Kursivschriften mit denen im Standard übereinstimmen, was bedeutet, dass diese Sätze definieren, was diese Sätze für den Rest des Standards bedeuten.
Tags und Links c++