2016-03-12 12 views

Antwort

16

Wenn eine Funktion oder eine Variable mit dem Namen identisch mit dem Namen eines Klassentypen in ihrem Umfang vorhanden ist, kann die Klasse mit dem Namen für Disambiguierung vorangestellt werden, in einem elaborated type specifier führt.

Sie können immer einen ausgearbeiteten Typspezifizierer verwenden. Der Hauptanwendungsfall ist jedoch, wenn Sie eine Funktion oder Variable mit einem identischen Namen haben.

Beispiel von cppreference.com:

class T { 
public: 
    class U; 
private: 
    int U; 
}; 

int main() 
{ 
    int T; 
    T t; // error: the local variable T is found 
    class T t; // OK: finds ::T, the local variable T is ignored 
    T::U* u; // error: lookup of T::U finds the private data member 
    class T::U* u; // OK: the data member is ignored 
} 
+0

Also hier die 'CLASS' ist die gleiche wie' typename'? – Narek

+0

@Narek: Nein. Versuchen Sie 'typename' in diesem Beispiel (oder in Ihrem) zu verwenden und Sie werden sehen, dass es fehlschlägt. –

+0

Diese Antwort ist etwas falsch formuliert. Sie dürfen * immer * einen ausgearbeiteten Typspezifizierer verwenden. Sein wichtigster * Anwendungsfall * ist jedoch, wenn Sie eine Funktion oder Variable mit einem identischen Namen haben. –