Pengenalan decltype(auto) dalam C 14 membawa ciri transformatif yang memperluaskan kemungkinan potongan jenis. Di luar tujuan utamanya untuk membenarkan pengisytiharan auto mematuhi peraturan decltype, decltype(auto) menawarkan pelbagai aplikasi berharga yang lain.
Dalam kod generik, memajukan jenis pemulangan dengan sempurna adalah penting. Tidak seperti kod bukan generik, di mana jenis pemulangan boleh ditentukan secara manual untuk mendapatkan jenis rujukan, decltype(auto) memberikan fleksibiliti untuk memajukan jenis pemulangan, tanpa mengira jenis rujukannya, tanpa sebarang pengetahuan awal.
template
decltype(auto) Contoh(Fun fun, Args&&... args)
{
return fun(std::forward<Args>(args)...);
}
Dalam templat rekursif, rekursi tak terhingga boleh berlaku semasa instantiasi templat jika jenis pulangan ditentukan berdasarkan lelaran sebelumnya. Dengan menggunakan decltype(auto), potongan jenis pemulangan ditangguhkan sehingga instansiasi templat selesai, memastikan peleraian jenis yang betul.
template
struct Int {};
constexpr auto iter(Int<0>) -> Int<0>;
template
constexpr auto iter(Int) -> decltype(auto)
{ return iter(Int
int main() { decltype(iter(Int<10>{})) a; }
Kepelbagaian decltype(auto) meluas ke konteks lain juga, seperti yang digariskan dalam piawaian draf C (N3936) :
Atas ialah kandungan terperinci Bagaimanakah `decltype(auto)` Mengembangkan Keupayaan Potongan Jenis C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!