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
Linda Hamiltonasal
2024-11-02 22:22:291050semak imbas

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>

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!

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