Rumah >pembangunan bahagian belakang >C++ >Mengapa C Menggunakan Operator Resolusi Skop (::) Walaupun Java Tidak?

Mengapa C Menggunakan Operator Resolusi Skop (::) Walaupun Java Tidak?

Linda Hamilton
Linda Hamiltonasal
2024-11-12 02:58:01345semak imbas

Why Does C   Use the Scope Resolution Operator (::) While Java Doesn't?

Mengapa C Memperkenalkan Operator Resolusi Skop

Berbanding dengan Java, C menyediakan pengendali resolusi skop yang berbeza (::) dan bukannya bergantung hanya pada operator titik (.). Walaupun kejayaan Java tanpa pengendali berasingan, C memerlukan penambahan ini kerana ciri bahasa yang unik: keupayaan untuk menggunakan pengecam yang sama untuk kedua-dua pembolehubah ahli dan jenis kelas terbitan.

Perbezaan ini menjadi jelas apabila mempertimbangkan kod seperti contoh di bawah:

struct foo { int blah; };
struct thingy { int data; };
struct bar : public foo { thingy foo; };

Dalam senario ini, kedua-dua pembolehubah ahli foo dalam struct bar dan jenis kelas terbitan foo berkongsi nama yang sama. Untuk menyelesaikan kekaburan ini, pengendali resolusi skop :: digunakan.

Apabila pengkompil menemui a ., ia menganggap operan kiri ialah objek. Sebaliknya, :: menandakan nama taip, ruang nama atau ruang nama global. Pembezaan ini membolehkan pengkompil mentafsir kod seperti berikut:

test.foo.data = 5;
test.foo::blah = 10;

Dalam pernyataan pertama, test.foo.data diiktiraf sebagai mengakses ahli data objek test.foo. Dalam pernyataan kedua, test.foo::blah menandakan mengakses ahli blah bagi kelas foo terbitan.

Oleh itu, pengendali resolusi skop dalam C berfungsi sebagai alat ketepatan untuk menyelesaikan kekaburan yang dicipta oleh elaun yang serupa pengecam untuk pembolehubah ahli dan jenis kelas terbitan.

Atas ialah kandungan terperinci Mengapa C Menggunakan Operator Resolusi Skop (::) Walaupun Java Tidak?. 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