Rumah >pembangunan bahagian belakang >C++ >Mengapakah Resolusi Lebihan Sarat Antara `int`, `int&&` dan `const int&`?

Mengapakah Resolusi Lebihan Sarat Antara `int`, `int&&` dan `const int&`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-29 00:04:15803semak imbas

Why is Overload Resolution Ambiguous Between `int`, `int&&`, and `const int&`?

Resolusi Terlebih Sarat antara Nilai, Rujukan Rvalue dan Rujukan Const Lvalue

Pertimbangkan senario berikut:

int f( int );
int f( int && );
int f( int const & );

int q = f( 3 );

Memanggil keputusan f(3) dalam resolusi lebihan yang tidak jelas. Menghapuskan f( int ) menyebabkan Clang dan GCC mengutamakan rujukan rnilai berbanding rujukan lnilai. Walau bagaimanapun, mengalih keluar sama ada lebihan beban rujukan membawa kepada kekaburan dengan f( int ).

Peraturan Resolusi Lebihan

Leraian lebihan beban biasanya mengikut susunan separa yang ketat. Walau bagaimanapun, dalam kes ini, int nampaknya bersamaan dengan dua konsep yang tidak setara antara satu sama lain. Peraturan khusus yang mengawal situasi ini adalah seperti berikut:

  • Sekurang-kurangnya satu pemulaan parameter untuk parameter yang dimaksudkan mestilah padanan yang lebih baik daripada kedua-dua yang lain.
  • Apabila membandingkan dua pemula, sama ada satu lebih baik daripada yang lain, atau tidak lebih baik (mereka tidak dapat dibezakan).
  • Tanpa peraturan khusus untuk pengikatan rujukan langsung, ketiga-tiga permulaan dalam senario ini tidak dapat dibezakan.
  • Peraturan mengikat rujukan langsung menjadikan int && padanan yang lebih baik daripada const int &, tetapi tidak lebih baik atau lebih buruk daripada int.

Kes Khas: Pengikatan Rujukan

13.3.3.2 standard C menyediakan peraturan khas untuk langsung pengikatan rujukan:

Jika S1 dan S2 ialah pengikatan rujukan (8.5.3) dan tidak merujuk kepada parameter objek tersirat bagi fungsi ahli bukan statik yang diisytiharkan tanpa kelayakan semula, dan S1 mengikat rujukan rnilai kepada nilai r dan S2 mengikat rujukan lnilai, kemudian S1 ialah padanan yang lebih baik daripada S2.

Peraturan ini tidak terpakai apabila salah satu permulaan ialah bukan rujukan yang mengikat.

Pertimbangan Masa Depan

The idea untuk menjadikan pengikatan rujukan padanan yang lebih baik daripada pengikatan bukan rujukan telah dicadangkan. Untuk memulakan perbincangan mengenai topik ini, disyorkan untuk menyiarkan cadangan sedemikian ke forum Cadangan Masa Depan ISO C.

Atas ialah kandungan terperinci Mengapakah Resolusi Lebihan Sarat Antara `int`, `int&&` dan `const int&`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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