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

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

DDD
發布: 2024-12-01 09:40:12
原創
327 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板