Поиск…


Синтаксис

  • function_name ([ function_args ]) [ function_attributes ] [ function_qualifiers ] -> trailing-return-type [ require_clause ]

замечания

Вышеприведенный синтаксис показывает объявление полной функции с использованием конечного типа, где квадратные скобки указывают необязательную часть объявления функции (например, список аргументов, если функция no-arg).

Кроме того, синтаксис возвращаемого типа возврата запрещает определять тип класса, union или enum внутри возвращаемого возвращаемого типа (обратите внимание, что это также недопустимо в первом типе возврата). Помимо этого, типы могут быть записаны таким же образом после -> как и в других местах.

Избегайте квалифицировать вложенное имя типа

class ClassWithAReallyLongName {
  public:
    class Iterator { /* ... */ };
    Iterator end();
};

Определение end элемента с возвращаемым типом возврата:

auto ClassWithAReallyLongName::end() -> Iterator { return Iterator(); }

Определение end элемента без возвращаемого типа возврата:

ClassWithAReallyLongName::Iterator ClassWithAReallyLongName::end() { return Iterator(); }

Возвращаемый тип возвращаемого типа просматривается в классе класса, в то время как ведущий тип возвращаемого значения просматривается в охватывающей области пространства имен и поэтому может потребовать «избыточной» квалификации.

Лямбда-выражения

Лямбда может иметь только возвращаемый тип возврата; синтаксис исходного типа возврата не применим к lambdas. Обратите внимание, что во многих случаях нет необходимости указывать тип возврата для лямбды вообще.

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow