首頁 >後端開發 >C++ >C 成員函數參數中單一與號 (&) 的意思是什麼?

C 成員函數參數中單一與號 (&) 的意思是什麼?

Barbara Streisand
Barbara Streisand原創
2024-12-13 09:49:11857瀏覽

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

探索單一& 符號在成員函數參數中的作用

在C 程式設計中,成員函數的語法通常包括& 符號的使用符號(&) 作為非靜態成員函數的參考限定符。這些符號可以根據用於呼叫函數的物件的值類別來影響函數呼叫的行為。本文深入探討了在這種情況下使用單一與號 (&) 的重要性。

具體來說,成員函數宣告的參數清單後面出現單一與號 & 表示該函數將在以下情況下被呼叫:該物件是左值引用或常規的非引用物件。這允許使用物件名稱或透過左值引用直接呼叫函數。例如:

class wrap {
  public:
    operator obj() const & { ... } // Invocable via lvalue reference
};

相反,如果沒有任何 ref 限定符,表示聲明中沒有 & 符號,則表示無論物件的值類別為何,都可以呼叫該函數。這意味著可以使用左值或右值引用來呼叫它。

要進一步理解區別,請考慮以下程式碼片段:

struct foo {
  void bar() {} // Function without a ref-qualifier
  void bar1() & {} // Function with an lvalue reference ref-qualifier
  void bar2() && {} // Function with an rvalue reference ref-qualifier
};

在此範例中:

  • bar 可以使用左值和右值引用來呼叫。
  • bar1 只能使用左值來呼叫引用或常規物件(即沒有任何引用的物件)。
  • bar2 只能使用右邊值引用呼叫。

為了說明此行為,以下程式碼示範了這些函數如何根據物件的值類別進行呼叫:

foo().bar(); // Always fine
foo().bar1(); // Doesn't compile because bar1 requires an lvalue
foo().bar2();

foo f;
f.bar(); // Always fine
f.bar1();
f.bar2(); // Doesn't compile because bar2 requires an rvalue

總而言之,在參數列表之後存在單一& 符號成員函數聲明表明當物件是左值引用時可以呼叫該函數。這提供了一種根據所使用物件的值類別來限制函數呼叫的方法。

以上是C 成員函數參數中單一與號 (&) 的意思是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn