C++
Volgend retourtype
Zoeken…
Syntaxis
- functienaam ([ function_args ]) [ function_attributes ] [ function_qualifiers ]
->
trailing-return-type [ vereist_claus ]
Opmerkingen
De bovenstaande syntaxis toont een volledige functieverklaring met een volgtype, waarbij vierkante haakjes een optioneel deel van de functieverklaring aangeven (zoals de lijst met argumenten als een no-arg-functie).
Bovendien verbiedt de syntaxis van het volgende retourtype het definiëren van een klasse-, unie- of enum-type binnen een volgend retourtype (merk op dat dit ook niet is toegestaan in een leidend retourtype). Afgezien daarvan kunnen typen na de ->
dezelfde manier worden gespeld als elders.
Vermijd het kwalificeren van een geneste typenaam
class ClassWithAReallyLongName {
public:
class Iterator { /* ... */ };
Iterator end();
};
Definieert het element end
met achterste return type:
auto ClassWithAReallyLongName::end() -> Iterator { return Iterator(); }
Definiëren van het end
zonder een volgteruglooptype:
ClassWithAReallyLongName::Iterator ClassWithAReallyLongName::end() { return Iterator(); }
Het volgende retourtype wordt opgezocht in het bereik van de klasse, terwijl een leidend retourtype wordt opgezocht in de omsluitende naamruimte en daarom een "redundante" kwalificatie kan vereisen.
Lambda-uitdrukkingen
Een lambda kan alleen een volgretourtype hebben; de toonaangevende syntaxis van het retourtype is niet van toepassing op lambdas. Merk op dat het in veel gevallen helemaal niet nodig is om een retourtype voor een lambda te specificeren.
struct Base {};
struct Derived1 : Base {};
struct Derived2 : Base {};
auto lambda = [](bool b) -> Base* { if (b) return new Derived1; else return new Derived2; };
// ill-formed: auto lambda = Base* [](bool b) { ... };