首页 > 后端开发 > C++ > C 重载解析如何处理 `int`、`int&&` 和 `const int&`?

C 重载解析如何处理 `int`、`int&&` 和 `const int&`?

Patricia Arquette
发布: 2024-11-20 19:58:16
原创
341 人浏览过

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&& from 3
  • int const& from 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板