Adakah Memanggil Kaedah Melalui Penunjuk Null dalam Kelakuan Ditakrifkan C?

Susan Sarandon
Lepaskan: 2024-10-27 18:40:30
asal
386 orang telah melayarinya

 Is Calling a Method Through a Null Pointer in C   Defined Behavior?

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!