Rumah >pembangunan bahagian belakang >C++ >Apakah Perbezaan Antara Ampersand Tunggal dan Berganda dalam Pengisytiharan Fungsi Ahli C?

Apakah Perbezaan Antara Ampersand Tunggal dan Berganda dalam Pengisytiharan Fungsi Ahli C?

Patricia Arquette
Patricia Arquetteasal
2024-12-06 13:34:13459semak imbas

What's the Difference Between Single and Double Ampersands in C   Member Function Declarations?

Tafsiran Mendalam Ampersand dalam Pengisytiharan Fungsi Ahli

Dalam C , fungsi ahli bukan statik boleh dihiasi dengan ref-qualifier . Pelayakkan ini menentukan kategori rujukan bagi parameter objek tersirat yang dihantar kepada fungsi.

Mari terokai dua pelayakkan semula biasa:

  1. Ampersan Tunggal (&) : Menandakan bahawa fungsi boleh digunakan dengan rujukan nilai kepada objek.
  2. Double Ampersand (&&): Menandakan bahawa fungsi boleh digunakan dengan rujukan rnilai kepada objek.

Tanpa menyatakan sebarang penentuan semula , fungsi boleh digunakan tanpa mengira kategori nilai objek.

Untuk menggambarkan perbezaan:

struct Foo {
    void bar() {}  // Default: can be invoked with both lvalues and rvalues
    void bar1() & {}  // Can only be invoked with lvalues
    void bar2() && {}  // Can only be invoked with rvalues
};

Dalam contoh di atas:

  • bar() boleh digunakan pada kedua-dua lvalues ​​(objek) dan rvalues ​​(objek sementara).
  • bar1() hanya boleh digunakan pada lvalues ​​kerana ia memerlukan rujukan lvalue kepada objek.
  • bar2() hanya boleh digunakan pada rvalues ​​kerana ia memerlukan rujukan rvalue kepada objek.

Berikut ialah demonstrasi langsung:

int main() {
    Foo f;
    f.bar();
    f.bar1();
    Foo().bar2();  // Error: bar2 requires an rvalue
}

Memahami ref-qualifier ini membolehkan anda mengawal akses kepada fungsi ahli anda berdasarkan kategori rujukan objek yang sedang digunakan. pada.

Atas ialah kandungan terperinci Apakah Perbezaan Antara Ampersand Tunggal dan Berganda dalam Pengisytiharan Fungsi Ahli C?. 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