autoşablon olarak tip kesinti aynı mekanizmayı, ben bundan çıkarılmaktadır ayracı-init listelerinin olmanın farkında olduğumu tek istisna kullanır autoolarak std::initializer_list, ancak bir şablon bağlamında olmayan çıkarılabilir.
auto x = expression;
önce sağ taraftaki ifadenin türünden tüm başvuru ve cv niteleyicilerini çıkararak, ardından türle eşleştirerek çalışır. Örneğin, varsa const int& f(){...}o zaman auto x = f();deduces xolarak intve değil const int& .
Diğer form,
auto& x = expression
şerit yok , yukarıdaki örneği kullanarak, bu yüzden, ev-eleme auto& x = f()deduces xolarak const int&. Diğer kombinasyonlar sadece cv niteleyicileri ekler.
Türünüzün her zaman cv-ref niteleyicileriyle çıkarılmasını istiyorsanız decltype(auto), decltypetür kesinti kurallarını kullanan C ++ 14'teki rezilliği kullanın .
Kısaca, eğer kopya istiyorsanız, kullanın auto, referans istiyorsanız kullanın auto&. constEk const-lik istediğinizde kullanın .
DÜZENLE
Ek bir kullanım durumu vardır,
auto&& x = expression;
şablon kodundaki referansların iletilmesi durumunda olduğu gibi, referans daraltma kurallarını kullanır. Eğer expressionbir ldeğer ise, o zaman xcv-niteleyicileriyle bir lvalue referansıdır expression. Eğer expressionbir rvalue ise, o xzaman bir rvalue referansıdır.
autoçalıştığıdır (initializer_lists'nin kendine özgü durumu hariç , bir şablon bağlamında çıkarılmamış), ardındanautokesinti yazın.