Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Berbilang Penukaran Ditentukan Pengguna Tersirat Digunakan dalam C?

Bolehkah Berbilang Penukaran Ditentukan Pengguna Tersirat Digunakan dalam C?

Susan Sarandon
Susan Sarandonasal
2024-10-31 22:09:02971semak imbas

Can Multiple Implicit User-Defined Conversions Be Applied in 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!

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