Rumah > pembangunan bahagian belakang > C++ > Mengapa Menentukan Parameter Templat Secara Eksplisit dalam `make_pair` C 11 Gagal Disusun?

Mengapa Menentukan Parameter Templat Secara Eksplisit dalam `make_pair` C 11 Gagal Disusun?

Mary-Kate Olsen
Lepaskan: 2024-12-21 11:43:17
asal
151 orang telah melayarinya

Why Does Explicitly Specifying Template Parameters in C  11's `make_pair` Fail to Compile?

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan