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

Bolehkah Berbilang Penukaran Ditentukan Pengguna Tersirat Digunakan dalam C?

Susan Sarandon
Lepaskan: 2024-10-31 22:09:02
asal
1061 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan