2012-12-23 21 views
25

Jak powinien wyglądać prototyp funkcji pod członkiem w C++ 11?Czy "auto a_class :: f (...) -> T const" jest niejednoznaczne w gramatyce?

class C { 
public: 
    auto f(...) -> T const; 
} 

To wydaje mi się, że może to być zarówno const funkcji członka klasy C lub funkcją non-const członek która zwraca wartość typu const T.

wiem mogłem wystarczy napisać funkcję jako

T const f(...); 

lub

T f(...) const; 

jednak chcę być zgodne z godziny ow deklaruję funkcje, więc postanowiłem użyć nowego sposobu C++ 11 auto f(...) -> RetType wszędzie.

Odpowiedz

29

Typ powrotu wstecz przychodzi po po cv- i ref-kwalifikacjach niestatycznej funkcji składowej. Oznacza to, że przykład w pytaniu jest taki sam jak T const f(...);.

§8.4.1 [dcl.fct.def.general] p2

declarator w funkcji-definicji ma postać

D1 (parametr deklaracja klauzula) CV kwalifikatora SEQ opcjonalnie Ref-kwalifikator opcjonalnie wyjątek-specyfikacja opt atrybut-specifier-seq opt trailing-r eturn typu opt

Aby zadeklarować funkcję const członkowskim, że piszesz auto f(...) const -> T const;.

+1

+1 (jak tego potrzebujesz) :-) –

+0

@KerrekSB Zastanawiam się, jak zmieni się wzór głosowania, jeśli nazwiska osób pytających, a także odpowiedzi będą ukryte. –