首頁 >後端開發 >C++ >為什麼「int」、「int&&」和「const int&」之間的重載解析不明確?

為什麼「int」、「int&&」和「const int&」之間的重載解析不明確?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-29 00:04:15807瀏覽

Why is Overload Resolution Ambiguous Between `int`, `int&&`, and `const int&`?

值、右值引用和常數左值引用之間的重載解析

考慮以下場景:

呼叫f( 3) 結果在一個不明確的重載決策中。消除 f( int ) 會導致 Clang 和 GCC 優先考慮右值引用而不是左值引用。但是,刪除任一引用重載都會導致 f( int ) 出現歧義。

重載解析規則

重載解析通常遵循嚴格的部分排序。然而,在這種情況下,int 似乎等同於兩個不等同的概念。管理這種情況的具體規則如下:

  • 相關參數的至少一個參數初始化必須比其他兩個更好匹配。
  • 比較兩個初始化時,要麼一個比另一個好,要麼都不好(它們無法區分)。
  • 如果沒有直接引用綁定的特定規則,則此中的所有三個初始化
  • 直接引用綁定規則使int && 比const int & 更好匹配,但兩者都不比int 更好或更差。

特殊情況:引用綁定

C標準的13.3.3.2提供了一個特殊的規則可以直接參考綁定:

如果S1 S2 是引用綁定(8.5.3),且都不引用未宣告的非靜態成員函數的隱式物件參數ref-qualifier,且S1 將右值參考綁定到右值,且S2 綁定左值引用,那麼S1S2 更好的匹配。

當其中一個初始化為不是引用綁定。

未來的考慮因素

進行引用的想法已經提出了比非引用綁定更好的匹配。要發起有關此主題的討論,建議將此類提案發佈到 ISO C 未來提案論壇。

以上是為什麼「int」、「int&&」和「const int&」之間的重載解析不明確?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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