decltype vs auto
Seperti yang saya mengerti, kedua decltype
dan auto
akan mencoba untuk mencari tahu apa jenis sesuatu.
Jika kita mendefinisikan:
int foo () {
return 34;
}
Kemudian kedua deklarasi hukum:
auto x = foo();
cout << x << endl;
decltype(foo()) y = 13;
cout << y << endl;
Bisa anda jelaskan apa perbedaan utama antara decltype
dan auto
?
43
3
decltype
memberikan menyatakan jenis ekspresi yang melewati itu.auto
melakukan hal yang sama seperti template jenis pemotongan. Jadi, misalnya, jika anda memiliki sebuah fungsi yang mengembalikan referensi,auto
masih akan menjadi nilai (anda perluauto&
untuk mendapatkan referensi), tapidecltype
akan persis jenis nilai kembali.auto
(dalam konteks di mana ia menyimpulkan jenis) terbatas untuk mendefinisikan tipe dari variabel yang ada initializer.decltype
adalah konstruk yang lebih luas, dengan biaya tambahan informasi, akan menyimpulkan jenis ekspresi.Dalam kasus-kasus di mana
auto
dapat digunakan, hal ini lebih ringkas daridecltype
, seperti yang anda don't perlu untuk memberikan ekspresi yang jenis akan disimpulkan.Kata kunci
auto
juga digunakan dalam benar-benar tidak terkait konteks, ketika menggunakan trailing tipe hasil untuk fungsi-fungsi:Ada
auto
hanya seorang pemimpin agar kompiler tahu bahwa ini adalah sebuah deklarasi dengan trailing tipe kembali. Sedangkan contoh di atas dapat dengan mudah dikonversi ke gaya lama, dalam pemrograman generik hal ini berguna:Perhatikan bahwa dalam kasus ini,
auto
tidak dapat digunakan untuk menentukan jenis kembali.Umumnya, jika anda membutuhkan jenis variabel yang akan anda menginisialisasi, menggunakan auto. decltype lebih baik digunakan ketika anda membutuhkan jenis untuk sesuatu yang tidak variabel, seperti jenis kembali.