Pertimbangkan templat fungsi:
template<typename T> void printme(T&& t) { for (auto i : t) std::cout << i; }
Fungsi ini mengharapkan satu parameter jenis dengan permulaan () dan tamat() fungsi.
Soalan:
Mengapa panggilan berikut haram?
printme({'a', 'b', 'c'});
Jawapan:
Panggilan printme({'a', 'b', 'c'}) adalah haram kerana hujah templat T tidak boleh disimpulkan. Tanpa menyatakan hujah templat secara eksplisit, pengkompil tidak boleh menentukan jenis parameter, kerana ia boleh menjadi sebarang jenis dengan fungsi begin() dan end(). Isu ini tidak timbul dalam kes berikut:
Pengecualian untuk ini ialah potongan auto sebagai std::initializer_list
Atas ialah kandungan terperinci Mengapakah `printme({\'a\', \'b\', \'c\'});` Haram dalam Potongan Jenis Templat C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!