Rumah >pembangunan bahagian belakang >C++ >Apakah Maksud Ampersand Tunggal (&) dalam Perisytiharan Fungsi Ahli C?

Apakah Maksud Ampersand Tunggal (&) dalam Perisytiharan Fungsi Ahli C?

Susan Sarandon
Susan Sarandonasal
2024-12-15 11:55:09691semak imbas

What Does the Single Ampersand (&) Mean in a C   Member Function Declaration?

Memahami Ampersand Tunggal dalam Perisytiharan Fungsi Ahli

Dalam coretan kod yang diberikan:

class wrap {
   operator obj() const & { ... }   //Copy from me.
   operator obj() && { ... }  //Move from me.
};

kami menghadapi dua pengisytiharan fungsi ahli dengan ref berbeza -kelayakan (& dan &&). Walau bagaimanapun, apakah yang dimaksudkan oleh ampersand tunggal (&)?

Ampersan tunggal dalam perisytiharan fungsi ahli bukan statik menunjukkan bahawa fungsi ahli digunakan apabila objek adalah rujukan nilai. Secara lalai, fungsi ahli bukan statik boleh digunakan pada kedua-dua objek lvalue dan rvalue. Walau bagaimanapun, dengan menyatakan &, fungsi hanya boleh menerima lvalues.

Untuk menggambarkan perbezaan:

struct foo
{
   void bar() {}
   void bar1() & {}
   void bar2() && {}
};
  • bar() menerima kedua-dua lvalues ​​dan rvalues.
  • bar1() memerlukan rujukan lvalue, jadi ia hanya boleh digunakan pada lvalue objek.
  • bar2() memerlukan rujukan rnilai, jadi ia hanya boleh digunakan pada objek rnilai.

Contoh:

int main()
{
   foo().bar();  // (always fine)
   foo().bar1(); // doesn't compile because `bar1()` requires an lvalue
   foo().bar2(); // doesn't compile because `bar2()` requires an rvalue

   foo f;
   f.bar();      // (always fine)
   f.bar1();
   f.bar2();     // doesn't compile because `bar2()` requires an rvalue
}

Atas ialah kandungan terperinci Apakah Maksud Ampersand Tunggal (&) dalam Perisytiharan 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