Untuk variabel, tentukan bahwa tipe variabel yang dideklarasikan akan secara otomatis dideduksi dari inisialisasi. Untuk fungsi, tentukan bahwa tipe return adalah tipe trailing return atau akan dideduksi dari pernyataan pengembaliannya (karena C ++ 14).
Sintaksis
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)
Penjelasan
1) Ketika mendeklarasikan variabel dalam lingkup blok, dalam lingkup namespace, dalam pernyataan inisialisasi untuk loop, dll., Kata kunci otomatis dapat digunakan sebagai penentu jenis. Setelah jenis penginisialisasi telah ditentukan, kompiler menentukan jenis yang akan menggantikan kata kunci otomatis menggunakan aturan untuk pengurangan argumen template dari panggilan fungsi (lihat pengurangan argumen template # Konteks lain untuk detail). Kata kunci otomatis dapat disertai oleh pengubah, seperti const atau &, yang akan berpartisipasi dalam pengurangan jenis. Sebagai contoh, diberikan const auto& i = expr;
, tipe i persis tipe argumen u dalam templat imajiner template<class U> void f(const U& u)
jika fungsinya memanggilf(expr)
dikompilasi. Oleh karena itu, auto && dapat disimpulkan sebagai referensi nilai atau referensi nilai sesuai dengan inisialisasi, yang digunakan dalam rentang berbasis untuk loop. Jika otomatis digunakan untuk mendeklarasikan beberapa variabel, tipe yang disimpulkan harus cocok. Misalnya, deklarasi tersebut terbentuk dengan baik dan otomatis disimpulkan sebagai int.auto i = 0, d = 0.0;
adalah bentukan, sedangkan deklarasi auto i = 0, *p = &i;
2) Dalam deklarasi fungsi yang menggunakan sintaks tipe trailing return, kata kunci otomatis tidak melakukan deteksi tipe otomatis. Ini hanya berfungsi sebagai bagian dari sintaks.
3) Dalam deklarasi fungsi yang tidak menggunakan sintaks tipe trailing return, kata kunci otomatis menunjukkan bahwa tipe kembali akan dideduksi dari operan pernyataan pengembalian menggunakan aturan untuk pengurangan argumen templat.
4) Jika tipe variabel yang dideklarasikan adalah tipe pernyataan (otomatis), kata kunci otomatis diganti dengan ekspresi (atau daftar ekspresi) dari penginisialisasi, dan jenis yang sebenarnya dideduksi menggunakan aturan untuk decltype.
5) Jika tipe kembalinya fungsi dideklarasikan decltype (otomatis), kata kunci auto diganti dengan operan dari pernyataan pengembaliannya, dan tipe pengembalian aktual disimpulkan menggunakan aturan untuk decltype.
6) Penspesifikasi nama-nama dari form auto :: adalah placeholder yang digantikan oleh kelas atau tipe enumerasi mengikuti aturan untuk pengurangan placeholder tipe terbatas.
7) Deklarasi parameter dalam ekspresi lambda. (sejak C ++ 14) Deklarasi parameter fungsi. (konsep TS)
Catatan
Sampai C ++ 11, otomatis memiliki semantik dari specifier durasi penyimpanan. Mencampur variabel dan fungsi otomatis dalam satu deklarasi, karena dalam auto f() -> int, i = 0;
tidak diperbolehkan.
Untuk info lebih lanjut: http://en.cppreference.com/w/cpp/language/auto