首頁 >後端開發 >C++ >C 重載解析如何處理值、右值參考和常數左值參考參數?

C 重載解析如何處理值、右值參考和常數左值參考參數?

DDD
DDD原創
2024-12-01 09:40:12289瀏覽

How Does C   Overload Resolution Handle Value, Rvalue Reference, and Const Lvalue Reference Parameters?

重載解析:值、右值引用和常數左值引用

在重載解析中,當多個函數呼叫時,遇到不明確的呼叫並不罕見。可行的函數共享相同的參數類型。當值、右值引用和 const 左值引用之間發生重載時,會出現一個特別有趣的情況。

歧義與解析

給定函數:

int f( int );
int f( int && );
int f( int const & );

呼叫 int q = f( 3 );變得曖昧。當 f( int ) 被刪除時,Clang 和 GCC 更喜歡右值引用而不是左值引用。但是,刪除任一引用重載都會導致 f( int ) 出現歧義。

重載解析規則

重載解析是基於為下列物件找到唯一的「較好匹配」參數。在沒有特殊規則的情況下,所有三種初始化(值、右值引用和 const 左值引用)將無法區分。

但是,由於右值引用綁定到右值,而const 左值引用則不綁定,因此由於13.3.3.2 中的以下規則,右值引用被認為是更好的匹配:

S1 binds an rvalue reference to an rvalue and S2 binds an lvalue reference.

此規則不當一個初始化不是引用綁定時適用。

未來標準的提案

作者建議在未來標準中int && 應該優先於int,因為它強制與不受約束的物件類型不同,綁定到初始值設定項的初始化。這可以作為純值傳遞的替代方案,同時避免移動的開銷。

以上是C 重載解析如何處理值、右值參考和常數左值參考參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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