Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Skop Rakan Sebaris Berfungsi dalam C Sebenarnya Berfungsi?

Bagaimanakah Skop Rakan Sebaris Berfungsi dalam C Sebenarnya Berfungsi?

Barbara Streisand
Barbara Streisandasal
2024-11-25 02:13:21585semak imbas

How Does the Scope of an Inline Friend Function in C   Actually Work?

Skop Fungsi Rakan Sebaris

Dalam konteks C , skop leksikal fungsi rakan sebaris meluas ke kelas yang ditakrifkan di dalamnya. Walau bagaimanapun, penentuan skop sebenar memerlukan penerokaan lanjut.

Piawaian ISO C menentukan bahawa apabila fungsi rakan sebaris diisytiharkan dalam kelas ruang nama berskop, ia menamakan fungsi dalam skop ruang nama tertutup yang terdekat. Jika fungsi itu belum diisytiharkan, pengisytiharan rakan sahaja tidak menjadikannya kelihatan dalam skop itu untuk carian tidak layak.

Sebaliknya, pengisytiharan rakan membenarkan fungsi itu diakses melalui carian bergantung kepada hujah (ADL ). Ini bermakna fungsi rakan boleh dipanggil menggunakan nama yang tidak layak asalkan argumen fungsi mempunyai jenis yang sepadan dengan skop ruang nama yang mengandungi pengisytiharan fungsi.

Oleh itu, fungsi rakan sebaris yang diisytiharkan dalam kelas hanya boleh dipanggil melalui ADL, melainkan ia kemudiannya diisytiharkan atau ditakrifkan dalam skop ruang nama yang dilampirkan. Ini memastikan bahawa fungsi hanya boleh diakses apabila argumen membenarkan peleraian nama yang tidak jelas.

Coretan kod berikut menggambarkan tingkah laku ini:

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

// Compilation error in main: 'baz' is not accessible through unqualified lookup
int main() {
  foo::baz();
}

Atas ialah kandungan terperinci Bagaimanakah Skop Rakan Sebaris Berfungsi dalam C Sebenarnya Berfungsi?. 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