首頁 > 後端開發 > C++ > C 重載解析如何處理 `int`、`int&&` 和 `const int&`?

C 重載解析如何處理 `int`、`int&&` 和 `const int&`?

Patricia Arquette
發布: 2024-11-20 19:58:16
原創
348 人瀏覽過

How Does C   Overload Resolution Handle `int`, `int&&`, and `const int&`?

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

考慮以下函數重載:

int f( int );
int f( int && );
int f( int const & );
登入後複製

呼叫int q = f( 3 );是不明確的,因為所有三個重載對於該參數都是可行的。重載解析規則規定,必須有一個參數初始化優於其他兩個參數。

在這種情況下,參數初始化為:

  • int from 3
  • int&& 從3
  • int const& 從3

但是,這些初始化都不比其他兩個好。因此,該調用是不明確的。

刪除 f( int ) 會導致 Clang 和 GCC 偏好右值引用 (int&&) 而不是左值引用 (int const&)。這是因為右值引用可以綁定到右值 3,而左值引用則不能。刪除任一引用重載都會導致 f( int ) 產生歧義。

此行為是由於 int 等效於 int&& 和 int const& 的事實。但是,int&& 和 int const& 並不等同。在它們之間進行選擇的規則是,當兩者都是引用綁定且 int&& 綁定到右值而 int const& 綁定到左值時,int&& 優於 int const&。

當其中一個初始化為不是參考綁定。因此,int 與 int&& 和 int const& 沒有區別。

在未來的標準中 int&& 不可能比 int 更受青睞。提議的規則將使引用綁定比非引用綁定更好的匹配,這將違反現有的重載解析規則。

以上是C 重載解析如何處理 `int`、`int&&` 和 `const int&`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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