Haben interne Namespace-Variablen interne Verknüpfungen? Wenn nicht, warum funktioniert der folgende Code?

8

Diese Frage steht in direktem Zusammenhang mit diesem . Betrachten Sie den Code:

%Vor%

Es zeigt 10 an. Wenn ich die Deklaration extern int x; lösche, erhalten wir einen Mehrdeutigkeits-Compiler-Zeitfehler

  

Fehler: Verweis auf 'x' ist mehrdeutig

Frage: Warum funktioniert der Code mit der Deklaration von extern int x und warum hört er auf zu arbeiten, wenn ich ihn entferne? Liegt es daran, dass Inline-Namespace-Variablen eine interne Verknüpfung haben?

    
vsoftco 23.11.2015, 18:00
quelle

2 Antworten

2

Nein. Es gibt keine Bestimmung in [basic.link], die x intern verlinken würde. "Alle anderen Namespaces haben externe Verknüpfung" und "andere" verweist auf "nicht namentlich". Vielleicht haben Sie an unbenannte Namensräume gedacht?

    
Kerrek SB 23.11.2015 18:03
quelle
1

Nein, der Code funktioniert, weil, um den bestehenden C-Code nicht zu zerstören, extern int x; in c in der gleichen Weise funktionieren muss, also ein lokales extern zu einem globalen Namespace erzeugt (das war alles, was wir in C hatten) ) Variable. Dann, wenn Sie es später verwenden, entfernt das lokal deklarierte Extern eine mögliche Mehrdeutigkeit.

    
Mark B 23.11.2015 18:06
quelle

Tags und Links