2009-03-09 9 views

Antwort

3

Im Allgemeinen wird der Namespace-Name dem Namen einer beliebigen eingeschlossenen Entität vorangestellt, bevor der Name geändert wird und zum Linker geht.

Wenn Sie zwei Funktionen mit den gleichen Signaturen in verschiedenen Namespaces haben, verlinken sie in eine Datei. Wenn Sie zwei Klassen mit dem gleichen Namen und mindestens eine Methode mit der gleichen Signatur haben und diese Klassen in verschiedenen Namespaces sind - sie verknüpfen sich wieder gut miteinander.

1

Sowohl C als auch C++ ermöglichen, dass Objekte und Funktionen eine statische Dateiverknüpfung haben, die auch als interne Verknüpfung bezeichnet wird. C++ unterstützt die Verwendung von unbenannten Namespaces anstelle des Dateibereichs, was ein Compilervorteil ist. static ist ein Verknüpfungsmodifikator. Wenn Sie den Dateibereich und die interne Verknüpfung verwenden möchten, sollten Sie in C++ sowohl Namespace als auch Static verwenden. In C benötigen Sie jedoch nur ein statisches Schlüsselwort, um dasselbe zu erreichen.

/* C and C++ code */ 

static int bufsize = 1024; 
static int counter = 0; 

static long square(long x) 
{ 
    return (x * x); 
} 

Der bevorzugte Weg, dies in C++ zu tun:

// C++ code 
namespace /*unnamed*/ 
{ 
    static int bufsize = 1024; 
    static int counter = 0; 

    static long square(long x) 
    { 
     return (x * x); 
    } 

} 
+0

Eigentlich ist es nur statische Objekte (nicht funktioniert), die veraltet sind. Siehe C++ - Standard, Anhang D, Abschnitt D.2; –

+0

Ja, dort heißt es nur "Objekte". In C++ ist die Verknüpfung sowohl für Objekte als auch für Funktionen intern und wenn entweder unbenannte Leerzeichen oder statische Verknüpfungen verwendet werden. – alvatar

Verwandte Themen