In bestimmten Fällen müssen Sie einen abschließenden Rückgabetyp verwenden. Vor allem muss ein Lambda-Rückgabetyp, falls angegeben, über einen abschließenden Rückgabetyp angegeben werden. Wenn Ihr Rückgabetyp eine decltype
verwendet, die erfordert, dass die Argumentnamen im Gültigkeitsbereich sind, muss ein abschließender Rückgabetyp verwendet werden (normalerweise kann jedoch declval<T>
verwendet werden, um dieses letzte Problem zu umgehen).
Der abschließende Rückgabetyp hat einige andere geringfügige Vorteile. Um zum Beispiel einer nicht-Inline-Funktionsdefinition mit der herkömmlichen Funktion Syntax beachten:
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
{
// ...
}
Mitglied typedefs ist in ihrem Umfang nicht erst nach dem Name der Klasse erscheint vor ::get_integers
, so müssen wir die Klasse Qualifikation zweimal wiederholen . Wenn wir eine Hinterrückgabetyp verwenden, brauchen wir nicht den Namen des Typs zu wiederholen:
auto my_awesome_type::get_integers() const -> integer_sequence
{
// ...
}
In diesem Beispiel ist es nicht so eine große Sache, aber wenn man lange Klassennamen oder Elementfunktionen Klassenvorlagen, die nicht inline definiert sind, können die Lesbarkeit erheblich beeinflussen.
In seiner "Fresh Paint" Sitzung in C++ Now 2012 wies Alisdair Meredith darauf hin, dass, wenn Sie Rückgabetypen konsequent verwenden Hinter, die Namen aller Ihre Funktionen ordentlich aufreihen:
auto foo() -> int;
auto bar() -> really_long_typedef_name;
ich verwendet habe, Trailing Rückgabetypen überall in CxxReflect, wenn Sie also nach einem Beispiel dafür suchen, wie Code sieht, sie konsistent zu verwenden, können Sie einen Blick dorthin werfen (zB the type
class).
Es ist dort meist für 'declltype' in Argumenten. –
was CatPlusPlus sagt: macht in Ihrem Beispiel wenig Sinn – stijn
@Cat Plus Plus Das bedeutet, dass Sie die Dinge so belassen, wie sie in C++ 03 sind, es sei denn, Sie müssen den Rückgabetyp ableiten? – mirk