C++
Släpningstyp
Sök…
Syntax
- function_name ([ function_args ]) [ function_attribut ] [ function_qualifiers ]
->
släp-retur-typ [ kräver_klausul ]
Anmärkningar
Ovanstående syntax visar en fullständig funktionsdeklaration med en släptyp, där fyrkantiga parenteser indikerar en valfri del av funktionsdeklarationen (som argumentlistan om en funktion utan arg).
Dessutom förbjuder syntaxen för släpreturtypen att definiera en klass, förening eller enumtyp inuti en släpreturtyp (observera att detta inte är tillåtet i en ledande returtyp heller). Utöver detta kan typer stavas på samma sätt efter ->
som de skulle vara någon annanstans.
Undvik att kvalificera ett kapselt namn
class ClassWithAReallyLongName {
public:
class Iterator { /* ... */ };
Iterator end();
};
Definiera end
med en bakre returtyp:
auto ClassWithAReallyLongName::end() -> Iterator { return Iterator(); }
Definiera end
utan släpningstyp:
ClassWithAReallyLongName::Iterator ClassWithAReallyLongName::end() { return Iterator(); }
Den efterföljande returtypen letas upp i klassens omfattning, medan en ledande returtyp letas upp i det bifogade namnområdet och kan därför kräva "redundant" kvalifikation.
Lambda-uttryck
En lambda kan bara ha en släpningstyp; den ledande syntaxen för returtyp gäller inte för lambdas. Observera att det i många fall inte är nödvändigt att specificera en returtyp för en lambda alls.
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) { ... };