Rumah > pembangunan bahagian belakang > C++ > Apakah Skop Fungsi Rakan Sebaris dalam C ?

Apakah Skop Fungsi Rakan Sebaris dalam C ?

Barbara Streisand
Lepaskan: 2024-11-24 14:12:28
asal
297 orang telah melayarinya

What is the Scope of Inline Friend Functions in C  ?

Menyingkap Skop Fungsi Rakan Sebaris

Dalam labirin selok-belok C, memahami bidang fungsi rakan sebaris boleh menjadi tugas yang menakutkan . Untuk merungkai enigma ini, mari kita mendalami persoalan utama: apakah skop sebenar fungsi sedemikian?

Pengisytiharan Fungsi Rakan dalam Skop Ruang Nama

Apabila fungsi rakan sebaris diisytiharkan dalam kelas, secara mengejutkan, ia tidak secara automatik berada dalam skop kelas. Sebaliknya, ia mewujudkan kehadiran dalam skop ruang nama tertutup yang terdekat. Walau bagaimanapun, kewujudan ini masih dikaburkan, disembunyikan daripada pandangan oleh mata yang berjaga-jaga daripada pencarian yang tidak layak dan berkelayakan.

Masukkan Pencarian Bergantung pada Hujah: Laluan Menuju Kebolehlihatan

Walaupun sukar difahami fungsi rakan sebaris dalam carian standard, wujud suar harapan yang dikenali sebagai carian bergantung hujah (ADL). Pendekatan rahsia ini membolehkan pengkompil untuk mendedahkan fungsi tersembunyi apabila panggilan fungsi tidak layak dibuat dalam konteks objek atau ungkapan kelas yang mengandungi.

Manifestasi Kod Kekaburan Skop

Untuk menggambarkan kerumitan skop, pertimbangkan kod berikut coretan:

namespace foo {
  struct bar {
    friend void baz() {}
    void call_friend();
  };
}

int main() {
  foo::baz(); // can't access through enclosing scope of the class
  foo::bar::baz(); // can't access through class scope
}

namespace foo {
  void bar::call_friend() {
    baz(); // can't access through member function
  }
}
Salin selepas log masuk

Setiap percubaan untuk menggunakan fungsi baz() secara langsung gagal, menyerlahkan halangan halimunan yang menghalang akses terus melalui carian yang tidak layak dan layak. Walau bagaimanapun, dalam fungsi ahli call_friend(), baz() bersinar, tanpa halangan oleh kekangan skop, terima kasih kepada kuasa kebajikan ADL.

Mohor Kuasa Piawai

Penjelasan muktamad tentang tingkah laku yang membingungkan ini terdapat dalam ISO/IEC 14882:2011 standard:

"Setiap nama yang pertama kali diisytiharkan dalam ruang nama ialah ahli ruang nama itu. Jika pengisytiharan rakan dalam kelas bukan tempatan mula-mula mengisytiharkan kelas atau fungsi kelas atau fungsi rakan ialah ahli yang paling dalam melampirkan ruang nama. Nama rakan tidak ditemui oleh carian yang tidak layak (3.4.1) atau oleh carian yang layak (3.4.3) sehingga pengisytiharan yang sepadan disediakan dalam itu skop ruang nama (sama ada sebelum atau selepas definisi kelas yang memberikan persahabatan Jika fungsi rakan dipanggil, namanya boleh ditemui dengan carian nama yang menganggap fungsi daripada ruang nama dan kelas yang dikaitkan dengan jenis argumen fungsi (3.4.2) ."

Petikan ini menggariskan sifat sementara fungsi rakan yang diisytiharkan tanpa kelayakan ruang nama yang jelas. Mereka mendiami alam halus ruang nama tertutup dan kekal sukar difahami oleh pandangan biasa, kecuali apabila dipanggil melalui upacara mistik ADL.

Atas ialah kandungan terperinci Apakah Skop Fungsi Rakan Sebaris dalam 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