Rumah >pembangunan bahagian belakang >C++ >Adakah Memanggil Kaedah Melalui Penunjuk Null dalam Kelakuan Ditakrifkan C?
Adakah Memanggil Kaedah Melalui Penunjuk Null Berfungsi dalam C ?
Sama seperti soalan pendua, mari kita periksa program C ini:
<code class="cpp">#include <iostream> using namespace std; class test { int i; public: test(): i(0) { cout << "ctor called" << endl; } void show() { cout << "show fun called" << endl; } }; int main(int argc, char *argv[]) { test *ptr = NULL; ptr->show(); return 0; }</code>
Di sini, kami memanggil kaedah show() pada penuding nol (ptr), yang menimbulkan persoalan: Adakah ini operasi yang sah?
Jawapannya
Memanggil kaedah melalui penuding nol bukan standard C dan dianggap tingkah laku tidak ditentukan. Walau bagaimanapun, sesetengah pengkompil mungkin mengoptimumkan kod ini untuk berjalan dengan cekap dengan melangkau semakan untuk penuding nol.
Sebabnya ialah kaedah ini sebenarnya tidak memerlukan penuding ini untuk melaksanakan kodnya. Pengkompil mengetahui jenis penuding, oleh itu ia boleh mencari kaedah dan menjalankan kodnya tanpa menyemak nilai penuding.
Walaupun tingkah laku ini mungkin mudah untuk sebab prestasi, adalah penting untuk menyedari bahawa ia bukan jaminan tingkah laku dan berbeza-beza merentasi penyusun dan sistem yang berbeza. Bergantung pada pengoptimuman ini boleh membawa kepada tingkah laku yang tidak dijangka dan salah dalam kod pengeluaran.
Oleh itu, sentiasa menjadi amalan terbaik untuk menyemak penunjuk nol sebelum menggunakannya, memastikan integriti dan kebolehramalan kod anda.
Atas ialah kandungan terperinci Adakah Memanggil Kaedah Melalui Penunjuk Null dalam Kelakuan Ditakrifkan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!