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 auto
olarak 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 x
olarak int
ve 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 x
olarak 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)
, decltype
tü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&
. const
Ek 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 expression
bir ldeğer ise, o zaman x
cv-niteleyicileriyle bir lvalue referansıdır expression
. Eğer expression
bir rvalue ise, o x
zaman bir rvalue referansıdır.
auto
çalıştığıdır (initializer_list
s'nin kendine özgü durumu hariç , bir şablon bağlamında çıkarılmamış), ardındanauto
kesinti yazın.