Klassendeklaration in der Funktionsparameterliste

9

Wie ich es verstehe, geht in C ++ eine Klasse, die in der Funktionsparameterliste deklariert ist, automatisch in den umschließenden Bereich:

%Vor%

entspricht:

%Vor%

Welcher Abschnitt in C ++ - Standard gibt dieses Verhalten an? Was ist mit C?

Nun, ich denke, C folgt in diesem Fall nicht C ++. Visual Studio kompiliert diesen Code nicht im C-Modus:

%Vor%     
igntec 10.06.2016, 08:58
quelle

1 Antwort

3

Dies ist ein elaborated-type-specifier . Das relevante Zitat in C ++ 14 ist:

  

[basic.lookup.elab]/2: [...] Wenn der elaborated-type-specifier von eingeführt wird   Der Klassenschlüssel und diese Suche findet keinen zuvor deklarierten Typnamen , oder wenn der elaborated-type-specifier ist   erscheint in einer Deklaration mit der Form:

%Vor%      

Der elaborated-type-specifier ist eine Deklaration, die den Klassennamen wie in 3.3.2 beschrieben einführt.

Dies deklariert den Klassennamen wie folgt:

  

[basic.scope.pdecl]/7: Der Deklarationspunkt einer Klasse, die zuerst in einem elaborated-type-specifier deklariert wurde, lautet wie folgt:

     

- [...]

     

- für elaborated-type-specifier des Formulars

%Vor%      

wenn der elaborated-type-specifier in der decl-specifier-seq oder Parameterdeklarationsklausel einer Funktion verwendet wird, die im Namensraumbereich , der Bezeichner wird als Klassenname im Namespace deklariert   enthält die Deklaration; Ansonsten, außer als Friend-Deklaration, wird der Bezeichner in der   kleinster Namespace oder Blockbereich, der die Deklaration enthält.

Weil struct A ein elaborated-type-specifier ist und A noch nicht deklariert wurde, wird A in dem Namespace deklariert, der die Deklaration enthält (in diesem Fall die globaler Namespace).

    
TartanLlama 10.06.2016 09:11
quelle

Tags und Links