重載解析:值、右值引用和常數左值引用
在重載解析中,當多個函數呼叫時,遇到不明確的呼叫並不罕見。可行的函數共享相同的參數類型。當值、右值引用和 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中文網其他相關文章!