C 11 make_pair Dengan Parameter Templat Eksplisit Gagal Disusun
Dalam C 11, fungsi make_pair direka untuk memudahkan penciptaan pasangan dengan jenis data yang ditentukan. Walau bagaimanapun, menyatakan parameter templat secara eksplisit dalam panggilan fungsi boleh membawa kepada ralat penyusunan.
Fungsi make_pair mengikuti sintaks templat:
template<typename T, typename U> make_pair(T&& argT, U&& argU);
Sntaks ini menunjukkan bahawa make_pair menerima dua rujukan nilai, argT dan argU, dan menyimpulkan parameter jenis templat T dan U daripada yang ditentukan argumen.
Apabila menyediakan hujah templat secara eksplisit, seperti dalam:
std::make_pair<std::string, int>(s, 7);
parameter rujukan nilai dijangka. Walau bagaimanapun, hujah lvalue yang diluluskan s tidak memenuhi keperluan ini. Oleh itu, pengkompil gagal mewujudkan padanan antara jenis argumen dan jenis parameter rujukan nilai.
Sebaliknya, apabila argumen templat ditinggalkan, pengkompil melakukan pemotongan hujah templat, yang berjaya mengikat s kepada T ( std::string&) dan 7 hingga U (int&&). Proses ini difasilitasi oleh gelagat unik rujukan rnilai dalam parameter templat, di mana ia boleh mengikat mana-mana jenis parameter templat yang sama, tanpa mengira status nilai atau nilai.
Untuk menyelesaikan ralat, tinggalkan sahaja yang eksplisit spesifikasi parameter templat.
Atas ialah kandungan terperinci Mengapa Menentukan Parameter Templat Secara Eksplisit dalam `make_pair` C 11 Gagal Disusun?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!