Gelagat Tidak Dijangka Kaedah Memanggil Melalui Penunjuk Null dalam C
Dalam coretan kod yang disediakan, kaedah digunakan melalui penuding nol, tetapi yang menghairankan, panggilan kaedah seolah-olah dilaksanakan tanpa ranap. Tingkah laku luar biasa ini menimbulkan persoalan: adakah ini dibenarkan dalam standard C atau hanya pengoptimuman pelaksanaan?
Penjelasan terletak pada sifat panggilan kaedah dalam C . Apabila kaedah objek digunakan, pengkompil mengetahui jenis objek, dan oleh itu alamat kaedah yang akan dilaksanakan. Dalam kes ini, jenis penuding diketahui (walaupun nilainya nol), jadi pengkompil masih boleh menentukan alamat kaedah.
Yang penting, kaedah yang dipanggil (tunjukkan) tidak mengakses objek objek keadaan (diwakili oleh penunjuk ini). Akibatnya, pelaksanaan kaedah berjalan seperti yang diharapkan, walaupun objek yang dikendalikannya tidak dimulakan.
Walaupun tingkah laku ini mungkin kelihatan tidak dijangka, ia tidak mematuhi standard. Piawaian C dengan jelas menyatakan bahawa mengakses ahli melalui penuding nol menghasilkan tingkah laku yang tidak ditentukan. Walau bagaimanapun, sesetengah penyusun boleh mengoptimumkan panggilan sedemikian dengan melangkau semakan penuding nol dan menggunakan kaedah secara langsung.
Pengoptimuman ini memperdagangkan keselamatan untuk kecekapan, kerana ia membenarkan panggilan kaedah dilaksanakan walaupun apabila ia tidak dimaksudkan. Walaupun ia mungkin menjimatkan sedikit masa semasa pelaksanaan, ia memperkenalkan potensi pepijat halus dan tingkah laku yang tidak ditentukan.
Oleh itu, adalah disyorkan untuk sentiasa menyemak penunjuk nol sebelum mengakses ahli objek untuk memastikan kelakuan program yang betul dan boleh diramal.
Atas ialah kandungan terperinci Bolehkah Panggilan Kaedah Melalui Penunjuk Null Dilaksanakan dalam C Tanpa Ranap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!