2016-03-12 15 views

Odpowiedz

16

Jeżeli funkcja lub zmienna występuje w zakresie o nazwie identycznej nazwy typ klasy, klasy mogą być na początku nazwy ujednoznacznienia, powodując elaborated type specifier.

Zawsze można używać opracowanego specyfikatora typu. Jednak jego głównym zastosowaniem jest funkcja lub zmienna o identycznej nazwie.

Przykład z 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

Więc tu 'class' jest taka sama jak' typename'? – Narek

+0

@Narek: Nie. Spróbuj użyć 'typename' w tym przykładzie (lub w twoim), a zobaczysz, że się nie uda. –

+0

Ta odpowiedź jest sformułowana nieco niepoprawnie. * Zawsze * możesz używać rozbudowanego specyfikatora typu. Jego głównym * przypadkiem użycia * jest jednak, gdy masz funkcję lub zmienną o identycznej nazwie. –

Powiązane problemy