0 Daumen
73 Aufrufe

Frage: Kann man so auf die Funktion foo() zugreifen? (C++)

Im Skript ist dieser Namensraum mit der Funktion definiert.

namespace NAME { void foo(void); ... }
Dabei steht jedoch das folgendes ein "unqualifizierter Zugriff" ist
using namespace NAME;
foo();

Qualifiziert wäre anscheinend nur:

NAME::foo();

Aber wieso ist das so?
Sagt man nicht durch "using namespace NAME", dass man den Namensraum NAME verwenden will, als seien alle darin definierten Variablen und Funktionen ohne Namensraum definiert?
Dann müsste man doch das so schreiben dürfen. Oder ist etwas anderes mit unqualifiziert gemeint, wie zum Beispiel "man sollte lieber das andere verwenden, weil das schlechter Stil wäre" aber funktionieren würde es?


von

1 Antwort

0 Daumen
 
Beste Antwort
Dabei steht jedoch das folgendes ein "unqualifizierter Zugriff" ist

using namespace NAME;
foo();

Qualifiziert wäre anscheinend nur:

NAME::foo();

Aber wieso ist das so?

Weil das so definiert ist. Siehe Qualified name lookup und Unqualified name lookup.

Sagt man nicht durch "using namespace NAME", dass man den Namensraum NAME verwenden will, als seien alle darin definierten Variablen und Funktionen ohne Namensraum definiert?

Ja. Mit anderen Worten, man kann dadurch mit einem unqualifizierten Zugriff auf Funktionen zugreifen, die in einem andere Namensraum definiert sind.

"man sollte lieber das andere verwenden, weil das schlechter Stil wäre"

Die *.cpp-Datei kannst du als dein Eigentum betrachten. Damit darfst du machen was du willst. Ob du dich für qualifizierten oder für unqualifizierten Zugriff entscheidest, ist im wesentlichen eine Stilfrage. Da habe ich schon gegenteilige Meinungen gehört.

Mit Header-Dateien sieht das anders aus. Die sind ja dazu gedacht, in andere Dateien eingebunden zu werden. Ein using namespace NAME; in einer Header-Datei überträgt sich auf alle Dateien, die diese Header-Datei einbinden. Das führt dann zu Namenskollisionen, die ja gerade durch Namensräume vermieden werden sollen.

von 2,5 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community