考虑以下场景:
int f( int ); int f( int && ); int f( int const & ); int q = f( 3 );
调用 f(3) 结果在一个不明确的重载决策中。消除 f( int ) 会导致 Clang 和 GCC 优先考虑右值引用而不是左值引用。但是,删除任一引用重载都会导致 f( int ) 出现歧义。
重载解析通常遵循严格的部分排序。然而,在这种情况下,int 似乎等同于两个并不等同的概念。管理这种情况的具体规则如下:
C标准的13.3.3.2提供了一个特殊的规则可以直接参考绑定:
如果 S1 和 S2 是引用绑定 (8.5.3),并且都不引用未声明的非静态成员函数的隐式对象参数ref-qualifier,并且 S1 将右值引用绑定到右值,并且S2 绑定左值引用,那么 S1 比 S2 更好的匹配。
当其中一个初始化为不是引用绑定。
进行引用的想法已经提出了比非引用绑定更好的匹配。要发起有关此主题的讨论,建议将此类提案发布到 ISO C 未来提案论坛。
以上是为什么'int”、'int&&”和'const int&”之间的重载解析不明确?的详细内容。更多信息请关注PHP中文网其他相关文章!