Derselbe Funktionsname in verschiedenen Namespaces

8

Angenommen, ich habe verschiedene Namespaces wie der Namespace von Apple und der Namespace von Orange, aber beide Namespaces enthalten eine Funktion namens myfunction ().

Was passiert, wenn ich myfunction () in main () aufruft?

    
Michael Goh 21.07.2015, 06:34
quelle

2 Antworten

22

Genau dafür wurden Namespaces eingeführt.

In Ihrem main() oder allgemein im globalen Namespace können Sie auswählen, welches myfunctions aufgerufen werden soll:

%Vor%

Im Falle eines mit Direktive ( using namespace apple ) oder eines mit Deklaration ( using apple::myfunction ) würde die letzte Zeile des mains die Version innerhalb haben der Namespace apple . Wenn sich beide Versionen von myfunction im Gültigkeitsbereich befinden, würde die letzte Zeile erneut einen Fehler verursachen, da Sie in diesem Fall angeben müssten, welche Funktion aufgerufen werden soll.

    
Paolo M 21.07.2015, 06:38
quelle
5

Betrachten Sie folgendes Beispiel.

%Vor%

Gemäß dem Namespace, in dem die Funktion deklariert ist, generiert der Compiler eine eindeutige Identität jeder Funktion namens Mangled Name, die nichts anderes ist als die Kodierung des Namespace-Bereichs, in dem Funktion definiert ist, Funktionsname, Rückgabetyp und Ist Parameter. Zeige Kommentare. Wenn Sie Aufrufe für diese Funktionen erstellen, sucht jeder Funktionsaufruf nach derselben verfälschten Signatur. Wenn nicht gefunden, meldet der Compiler einen Fehler.

Versuchen Sie, mit clang -emit-llvm -S -c main.cpp -o main.ll zu experimentieren, wenn Sie an internem Arbeiten interessiert sind.

    
Mahesh Attarde 21.07.2015 11:42
quelle

Tags und Links