2017-01-11 19 views
7

W poniższym przykładzie:Wracając członek klasy w C++

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

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

Dlaczego dokładnie zakres wymagany typ zwracany, natomiast nie na typ argumentu?

Odpowiedz

8

Zgodnie [basic.lookup.qual]/3,

W deklaracji, którym declarator ID jest wykwalifikowany ID nazwy stosowane przed kwalifikowanej ID zadeklarowane jako są wyszukiwane w obszarze definiującym przestrzeń nazw; Nazwy następujące po kwalifikowanym id są wyszukiwane w zakresie klasy lub przestrzeni nazw członków.

Typ zwracany przychodzi przed kwalifikowaną id zadeklarowane (czyli A::Method), podczas gdy typ parametru przychodzi po to, aby nazwa typu parametru jest automatycznie spojrzał w zakresie A, natomiast nazwa typu zwrotu nie jest. Możemy uniknąć dodatkowych kwalifikacji za pomocą wstecznego typu zwrotu.

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

Czy jestem jedynym facetem, który musiał przeczytać standardowy cytat 10 razy powoli, aby go uzyskać? – user

+0

@user Zdaję sobie sprawę, że nie jest łatwo przeczytać, jeśli nie znasz słownictwa. Dlatego wyjaśniłem to również poniżej. – Brian

+3

Tak, zdecydowanie zaoszczędziłeś mi 20 dodatkowych odczytów – user

Powiązane problemy