Penukaran Tersirat dalam C
Dalam perbincangan baru-baru ini mengenai penukaran tersirat dalam C , persoalan telah timbul tentang kebolehgunaan berbilang penukaran dalam satu operasi . Untuk menjelaskan konsep ini, mari kita periksa kod berikut:
<code class="cpp">#include <string> 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 pada mulanya, panggilan fungsi pertama adalah ralat kerana tiada penukaran langsung daripada const char* kepada A. Manakala penukaran daripada rentetan kepada A wujud, menggunakannya memerlukan dua penukaran berturut-turut.
Menurut Piawaian C (SC22-N-4411.pdf), bahagian 12.3.4 bertajuk 'Penukaran':
" Paling banyak satu penukaran yang ditentukan pengguna (pembina atau fungsi penukaran) digunakan secara tersirat pada satu nilai."
Ini menunjukkan bahawa dalam kod yang diberikan, pengkompil tidak boleh secara tersirat menggunakan kedua-dua pembina untuk A(const std: :string &) dan penukaran tersirat daripada const char* kepada std::string (yang kemudiannya ditukar kepada A) kepada hujah "one".
Oleh itu, penegasan asal bahawa panggilan fungsi pertama akan mengakibatkan kesilapan adalah betul. Piawaian C secara eksplisit menyatakan bahawa hanya satu penukaran tersirat yang ditentukan pengguna dibenarkan, menghalang pengkompil daripada melaksanakan langkah yang diperlukan untuk memenuhi jenis parameter fungsi.
Atas ialah kandungan terperinci Bolehkah Berbilang Penukaran Tersirat Digunakan dalam Operasi Tunggal dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!