Rumah > pembangunan bahagian belakang > C++ > Bolehkah Berbilang Penukaran Tersirat Digunakan dalam Operasi Tunggal dalam C?

Bolehkah Berbilang Penukaran Tersirat Digunakan dalam Operasi Tunggal dalam C?

Linda Hamilton
Lepaskan: 2024-11-02 22:22:29
asal
1041 orang telah melayarinya

Can Multiple Implicit Conversions Be Applied in a Single Operation in C  ?

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

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!

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