![]() |
1
5
立即修复执行以下操作:
来解决你的问题。
如果
你的解决方案出了什么问题
这是怎么回事
向类型添加运算符时,始终在类型的命名空间中定义运算符。
可以重新打开命名空间。因此,如果无法控制头文件,可以使用
长版
首先,它在本地(在本地命名空间中)查找。如果在那里找到什么,搜索就会停止。(这包括
如果找不到匹配项,它将开始查找封闭命名空间,直到找到函数/运算符或到达根命名空间为止。如果有的话
接下来,ADL(参数相关查找)完成。将检查所有函数/运算符参数的关联命名空间。此外,还将(递归地)检查模板的所有类型参数的关联命名空间。 将收集与名称匹配的运算符/函数。对于ADL,不检查父命名空间。 这两个运算符/函数集合是重载解析的候选对象。
接下来,我们检查参数的名称空间--
现在,当您移动用户定义的
超负荷解决(它对候选人做什么)是它自己复杂的主题。简而言之,它试图找到包含最少转换量的重载;如果两种情况完全匹配,则它更倾向于使用非模板而不是模板,使用非variardic而不是variardic。
“最小转换量”和“完全”中有很多细节可能误导程序员。最常见的是转换
|
![]() |
2
0
|
![]() |
jxh · 对依赖于参数的查找和友元函数定义的混淆 10 年前 |