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) { ... };


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow