首頁 > 後端開發 > C++ > Value、Rvalue Reference 和 Const Lvalue Reference 參數之間何時會出現 C 重載解析歧義?

Value、Rvalue Reference 和 Const Lvalue Reference 參數之間何時會出現 C 重載解析歧義?

Linda Hamilton
發布: 2024-11-28 11:16:13
原創
807 人瀏覽過

When Do C   Overload Resolution Ambiguities Arise Between Value, Rvalue Reference, and Const Lvalue Reference Parameters?

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

給定三個不同參數類型的重載函數(值、右值引用、const 左值引用),如果所有三個重載都可行,則函數呼叫可能會變得不明確。本文討論了在此類場景中管理重載決策的規則,並探討了在 C 中觀察到的細微行為。

規則

只考慮一個參數,該規則規定一個參數初始化必須是兩者另外兩個更好的匹配。比較兩個初始化時,要麼認為其中一個更好,要麼都認為兩者都更好(無法區分)。

如果沒有直接引用綁定的特殊規則,這三個初始化在所有三個比較中將無法區分。然而,這些特殊規則將 int&& (右值引用)提升到高於 const int& (左值引用),但兩者都不被認為比 int (值)更好或更差。因此,不會出現最佳匹配。

比較矩陣

以下矩陣說明了此行為:

S1    S2
int   int&&         indistinguishable
int   const int&    indistinguishable
int&& const int&    S1 better
登入後複製

此矩陣顯示 int&& 優於 const int&基於 C 標準第 13.3.3.2 條。此規則適用於不引用沒有 ref 限定詞的非靜態成員函數的隱式物件參數的參考綁定,並且其中 S1 將右值引用綁定到右值,而 S2 則綁定左值引用。

但是,當其中一個初始化不是引用綁定時,此規則不適用,因此存在歧義。

Future方向

作者建議將int&& (右值引用)視為比int (值)更好的匹配,因為引用必須綁定到初始值設定項,而物件類型不受此類約束。這可能會建立一個新的重載解析規則,該規則優先考慮來自初始值設定項目的綁定。然而,這個提議需要透過 isocpp 未來提案平台進行進一步討論和潛在的標準化。

以上是Value、Rvalue Reference 和 Const Lvalue Reference 參數之間何時會出現 C 重載解析歧義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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