2017-01-11 3 views
7

Im folgende Beispiel:Rückkehr Mitglied Klasse in C++

class A 
{ 
public: 
    class B 
    { 
     ... 
    } 
    B Method(B argument); 
} 

A::B A::Method(B argument); 

Warum genau der Spielraum für Rückgabetyp erforderlich ist, obwohl sie nicht für Argumenttyp?

Antwort

8

Nach [basic.lookup.qual]/3,

In einer Erklärung, in der die declarator-ID ist einequalifizierte ID, verwendete Namen vor der qualifizierten ID deklariert werden im Definitionsbereich Namespace nachgeschlagen; Namen, die auf die qualifizierte ID folgen, werden im Bereich der Klasse oder des Namespaces des Members nachgeschlagen.

Der Rückgabetyp kommt, bevor die qualifizierte ID erklärt zu werden (das heißt, A::Method), während die Art des Parameters, nachdem es kommt, so dass der Name des Parametertypen automatisch in dem Rahmen A nachgeschlagen wird, während die Der Name des Rückgabetyps ist nicht. Wir können die zusätzliche Qualifikation vermeiden, indem wir einen nachgestellten Rückgabetyp verwenden.

auto A::Method(B argument) -> B; 
+3

Bin ich der einzige Typ, der das Standardzitat zehnmal langsam lesen musste, um es zu bekommen? – user

+0

@user Ich merke, dass es nicht so einfach zu lesen ist, wenn Sie nicht mit dem Vokabular vertraut sind. Deshalb habe ich auch unten erklärt. – Brian

+3

Ja, du hast mir auf jeden Fall 20 zusätzliche Lesevorgänge erspart – user

Verwandte Themen