Değişkenler için, bildirilen değişkenin türünün başlatıcıdan otomatik olarak düşüleceğini belirtir. İşlevler için, dönüş türünün sondaki dönüş türü olduğunu veya dönüş ifadelerinden düşüleceğini belirtir (C ++ 14'ten beri).
Sözdizimi
auto variable initializer (1) (since C++11)
auto function -> return type (2) (since C++11)
auto function (3) (since C++14)
decltype(auto) variable initializer (4) (since C++14)
decltype(auto) function (5) (since C++14)
auto :: (6) (concepts TS)
cv(optional) auto ref(optional) parameter (7) (since C++14)
açıklama
1) Değişkenleri blok kapsamında, ad alanı kapsamında, döngüler için başlatma deyimlerinde vb. Bildirirken, auto anahtar sözcüğü tür belirleyicisi olarak kullanılabilir. Başlatıcı türü belirlendikten sonra, derleyici, bir işlev çağrısından şablon bağımsız değişkeni kesinti kurallarını kullanarak otomatik anahtar kelimeyi değiştirecek türü belirler (ayrıntılar için şablon bağımsız değişken kesinti # Diğer bağlamlara bakın). Auto anahtar sözcüğüne, tür indirimine katılacak const veya & gibi değiştiriciler eşlik edebilir. Örneğin, const auto& i = expr;
i template<class U> void f(const U& u)
fonksiyonu, eğer işlev çağrısı yaparsa , tam olarak hayali bir şablondaki u argümanının türüdür.f(expr)
derlendi. Bu nedenle, otomatik &&, döngü için aralık tabanlı olarak kullanılan başlatıcıya göre bir lvalue referansı veya rvalue referansı olarak çıkarılabilir. Birden fazla değişkeni bildirmek için otomatik kullanılırsa, çıkarılan türlerin eşleşmesi gerekir. Örneğin auto i = 0, d = 0.0;
, deklarasyon auto i = 0, *p = &i;
iyi biçimlenmemişken, deklarasyon iyi biçimlendirilmiş ve otomatik int olarak çıkarılmıştır.
2) Sondaki dönüş türü sözdizimini kullanan bir işlev bildiriminde, auto anahtar sözcüğü otomatik tür algılama gerçekleştirmez. Yalnızca sözdiziminin bir parçası olarak hizmet eder.
3) Sondaki dönüş türü sözdizimini kullanmayan bir işlev bildiriminde, auto anahtar sözcüğü, dönüş türünün, şablon bağımsız değişkeni kesinti kuralları kullanılarak dönüş ifadesinin işlenenden düşüleceğini belirtir.
4) Değişkenin bildirilen türü decltype (auto) ise, auto anahtar sözcüğü, başlatıcısının ifadesi (veya ifade listesi) ile değiştirilir ve gerçek tür, decltype kuralları kullanılarak çıkarılır.
5) İşlevin dönüş türü decltype (auto) olarak bildirilirse, auto anahtar sözcüğü, return ifadesinin işleneniyle değiştirilir ve gerçek dönüş türü, decltype kuralları kullanılarak çıkarılır.
6) auto :: formunun iç içe ad belirteci, kısıtlanmış tür yer tutucu kesinti kurallarına göre bir sınıf veya numaralandırma türüyle değiştirilen bir yer tutucudur.
7) Lambda ifadesinde parametre bildirimi. (C ++ 14'ten beri) Bir fonksiyon parametresi bildirimi. (TS kavramları)
Notlar
C ++ 11'e kadar, auto bir depolama süresi belirleyicisinin semantiğine sahipti. Otomatik değişkenlerin ve işlevlerin, bir bildirimle olduğu gibi karıştırılmasına auto f() -> int, i = 0;
izin verilmez.
Daha fazla bilgi için: http://en.cppreference.com/w/cpp/language/auto