수색…


통사론

  • function_name ([ function_args ]) [ function_attributes ] [ function_qualifiers ] -> 후행 반환 유형 [ requires_clause ]

비고

위의 구문은 후행 형식을 사용하여 전체 함수 선언을 보여줍니다. 여기서 대괄호는 함수 선언의 선택적 부분을 나타냅니다 (인수가없는 함수 인 경우 인수 목록과 같습니다).

또한 후행 반환 형식의 구문을 사용하면 클래스, 공용체 또는 열거 형을 후행 반환 형식 내에 정의 할 수 없습니다 (앞의 반환 형식에서도 허용되지 않음). 그것 이외의 다른 유형과 마찬가지로 -> 이후에 동일한 유형으로 철자를 지정할 수 있습니다.

중첩 된 형식 이름을 한정하지 마십시오.

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

후행 반환 형식을 사용하여 멤버 end 정의

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

후행 반환 형식을 사용하지 않고 멤버 end 정의 :

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

후행 반환 형식은 클래스의 범위에서 조회되지만 앞의 반환 형식은 둘러싸는 네임 스페이스 범위에서 조회되므로 "중복"자격이 필요할 수 있습니다.

람다 식

람다는 후행 반환 유형을 가질 수 선행 반환 형식 구문은 람다에 적용 할 수 없습니다. 대부분의 경우 람다의 반환 유형을 지정하지 않아도됩니다.

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