Sonda bir dönüş türü kullanmanız gereken belirli durumlar vardır. En önemlisi, bir lambda dönüş türü, belirtilirse, sondaki dönüş türü aracılığıyla belirtilmelidir. Ayrıca, dönüş türünüz decltype
, bağımsız değişken adlarının kapsam içinde olmasını gerektiren a kullanıyorsa , sondaki dönüş türü kullanılmalıdır (ancak, genellikle declval<T>
bu son soruna geçici bir çözüm bulmak için kullanılabilir ).
Sondaki dönüş türünün başka bazı küçük avantajları vardır. Örneğin, geleneksel işlev sözdizimini kullanan satır içi olmayan bir üye işlev tanımını düşünün:
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
{
}
Üye türleri, sınıfın adı daha önce görünene kadar kapsam dahilinde değildir ::get_integers
, bu nedenle sınıf niteliğini iki kez tekrarlamamız gerekir. Sonda bir dönüş türü kullanırsak, türün adını tekrar etmemize gerek yoktur:
auto my_awesome_type::get_integers() const -> integer_sequence
{
}
Bu örnekte, o kadar da önemli değil, ancak uzun sınıf adlarına veya satır içi tanımlanmamış sınıf şablonlarının üye işlevlerine sahipseniz, okunabilirlikte büyük bir fark yaratabilir.
Onun içinde "Taze Boya" C ++ Şimdi 2012'de de oturumda, Alisdair Meredith sürekli olarak dönüş türlerini sondaki kullanırsanız, tüm fonksiyonları isimleri düzgünce sıraya dikkat çekti:
auto foo() -> int;
auto bar() -> really_long_typedef_name;
Ben her yerde dönüş türlerini sondaki kullanılan ettik CxxReflect kod görünüyor sürekli bunları kullanarak nasıl bir örnek arıyorsanız eğer öyleyse, bir göz var (örneğin alabilir sınıf ).type
decltype
tartışmalar için oradadır .