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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow