후행 반환 유형을 사용해야하는 특정 경우가 있습니다. 특히 람다 반환 유형이 지정된 경우 후행 반환 유형을 통해 지정되어야합니다. 또한 반환 유형 decltype
이 인수 이름이 범위 내에 있어야하는를 사용하는 경우 후행 반환 유형을 사용해야합니다 (그러나 일반적 declval<T>
으로이 문제를 해결 하는 데 사용할 수 있음 ).
후행 반환 유형에는 몇 가지 다른 사소한 이점이 있습니다. 예를 들어, 전통적인 함수 구문을 사용하는 비 인라인 멤버 함수 정의를 고려하십시오.
struct my_awesome_type
{
typedef std::vector<int> integer_sequence;
integer_sequence get_integers() const;
};
my_awesome_type::integer_sequence my_awesome_type::get_integers() const
{
}
멤버 typedef는 클래스 이름이 앞에 나타날 때까지 범위에 포함되지 않으므로 ::get_integers
클래스 제한을 두 번 반복해야합니다. 후행 반환 유형을 사용하는 경우 유형의 이름을 반복 할 필요가 없습니다.
auto my_awesome_type::get_integers() const -> integer_sequence
{
}
이 예제에서는 그렇게 큰 문제는 아니지만 인라인으로 정의되지 않은 클래스 템플릿의 멤버 함수 나 긴 클래스 이름이 있으면 가독성에 큰 차이를 만들 수 있습니다.
자신의에서 "신선한 페인트" C ++ 이제 2012 세션, 엘리스 데어 메레디스는 지속적으로 반환 형식을 후행 사용하는 경우, 당신의 모든 기능의 이름이 깔끔하게 정렬 지적 :
auto foo() -> int;
auto bar() -> really_long_typedef_name;
나는 도처에 반환 형식을 후행 사용했습니다 CxxReflect 당신이 코드 외모가 일관되게 사용하는 방법의 예를 찾고 그렇다면, 당신은보고있다 (예를 들어,이 걸릴 수 클래스 ).type
decltype
논쟁에 대한 것입니다.