首页 > 后端开发 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板