Rumah > Artikel > pembangunan bahagian belakang > Bagaimana C Overload Resolution Mengendalikan `int`, `int&&` dan `const int&`?
Resolusi Lebihan Beban antara Nilai, Rujukan Nilai R, Rujukan Nilai Konst
Pertimbangkan lebihan fungsi berikut:
int f( int ); int f( int && ); int f( int const & );
Panggilan int q = f( 3 ); adalah samar-samar kerana ketiga-tiga beban berlebihan adalah berdaya maju untuk hujah. Peraturan untuk resolusi beban lampau menyatakan bahawa mesti ada satu permulaan parameter yang lebih baik daripada kedua-dua yang lain.
Dalam kes ini, permulaan parameter ialah:
Walau bagaimanapun, tiada satu pun daripada permulaan ini lebih baik daripada dua yang lain. Oleh itu, panggilan adalah samar-samar.
Mengalih keluar f( int ) menyebabkan Clang dan GCC memilih rujukan rnilai (int&&) berbanding rujukan lnilai (int const&). Ini kerana rujukan rvalue boleh terikat kepada rvalue 3, manakala rujukan lvalue tidak boleh. Mengalih keluar sama ada lebihan rujukan menyebabkan kesamaran dengan f( int ).
Tingkah laku ini disebabkan oleh fakta bahawa int bersamaan dengan kedua-dua int&& dan int const&. Walau bagaimanapun, int&& dan int const& tidak setara antara satu sama lain. Peraturan untuk memilih antaranya ialah int&& adalah lebih baik daripada int const& apabila kedua-duanya adalah pengikatan rujukan dan int&& mengikat kepada nilai dan int const& mengikat kepada nilai.
Peraturan ini tidak terpakai apabila salah satu permulaan ialah bukan pengikat rujukan. Oleh itu, int tidak dapat dibezakan daripada kedua-dua int&& dan int const&.
Tiada kemungkinan int&& akan diutamakan berbanding int dalam piawaian akan datang. Peraturan yang dicadangkan akan menjadikan pengikatan rujukan padanan yang lebih baik daripada pengikatan bukan rujukan, yang akan bertentangan dengan peraturan sedia ada untuk penyelesaian beban berlebihan.
Atas ialah kandungan terperinci Bagaimana C Overload Resolution Mengendalikan `int`, `int&&` dan `const int&`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!