Rumah > Artikel > pembangunan bahagian belakang > Bolehkah Berbilang Penukaran Ditentukan Pengguna Tersirat Digunakan dalam C?
Penukaran Tersirat C: Penjelasan
Dalam perbincangan baru-baru ini, kesahihan penukaran tersirat dalam C telah dipersoalkan. Secara khusus, isu ini berkisar sama ada berbilang penukaran tersirat yang ditentukan pengguna dibenarkan. Untuk menjelaskan perkara ini, mari kita periksa kod berikut:
<code class="cpp">struct A { A( const std::string & s ) {} }; void func( const A & a ) { } int main() { func( "one" ); // error func( A("two") ); // ok func( std::string("three") ); // ok }</code>
Seperti yang dinyatakan dalam soalan asal, panggilan fungsi pertama mengakibatkan ralat kerana tiada penukaran daripada const char * kepada A . Walaupun penukaran daripada rentetan kepada A wujud, penggunaan ini melibatkan berbilang penukaran, yang tidak dibenarkan. Ini disokong oleh Piawaian C:
<code class="cpp">4 At most one user-defined conversion (constructor or conversion function) is implicitly applied to a single value.</code>
Dalam kes ini, kehadiran dua penukaran tersirat (rentetan kepada const char dan const char kepada A) melanggar peraturan ini, yang membawa kepada ralat penyusun. Oleh itu, dakwaan bahawa berbilang penukaran tersirat yang ditentukan pengguna adalah dilarang dalam C adalah tepat.
Atas ialah kandungan terperinci Bolehkah Berbilang Penukaran Ditentukan Pengguna Tersirat Digunakan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!