Rumah > pembangunan bahagian belakang > C++ > Mengapakah Saya Tidak Boleh Memanggil Fungsi Rakan Sebaris Secara Terus dari Dalam Kelas Penentuan Mereka?

Mengapakah Saya Tidak Boleh Memanggil Fungsi Rakan Sebaris Secara Terus dari Dalam Kelas Penentuan Mereka?

Linda Hamilton
Lepaskan: 2024-11-29 11:56:11
asal
802 orang telah melayarinya

Why Can't I Directly Call Inline Friend Functions from Within Their Defining Class?

Skop Keterlihatan Fungsi Rakan Sebaris

Walaupun mentakrifkan fungsi rakan sebaris dalam kelas, skop sebenar mereka melangkaui sempadan kelas. Piawaian C menetapkan bahawa nama fungsi rakan sebaris merujuk kepada fungsi yang diisytiharkan dalam skop ruang nama tertutup yang terdekat.

Walau bagaimanapun, fungsi yang diisytiharkan ini tidak boleh diakses melalui carian yang tidak layak atau layak sehingga pengisytiharan yang sepadan disediakan dalam ruang nama tersebut skop. Akibatnya, panggilan terus ke fungsi rakan daripada kelas itu sendiri, melampirkan skop atau fungsi ahli akan mengakibatkan ralat.

Penghadan ini berpunca daripada fakta bahawa fungsi rakan diisytiharkan dalam kelas tanpa mengatasi atau mentakrifkan semula nama fungsi sedia ada. Oleh itu, pengkompil tidak mengenali fungsi dalam kelas atau melampirkan skop ruang nama sehingga ia menemui pengisytiharan eksplisit dalam ruang nama itu.

Untuk mengakses fungsi rakan sebaris, anda boleh menggunakan carian bergantung kepada hujah (ADL) . ADL membenarkan pengkompil untuk mencari fungsi berdasarkan jenis argumen yang digunakan dalam panggilan. Pendekatan ini sejajar dengan prinsip bahawa fungsi itu dianggap "berkaitan" dengan jenis yang diluluskan sebagai hujah.

Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Memanggil Fungsi Rakan Sebaris Secara Terus dari Dalam Kelas Penentuan Mereka?. 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