|
|
1
110
如果他们是相关的
让我们假设一下
第一个转换函数不是候选函数,因为
对于第二个函数,存在以下候选函数:
如果你愿意的话 警官,我们有以下候选人
这就意味着我们不能再按常量选择了。在普通的重载解析场景中,调用现在是不明确的,因为通常返回类型不会参与重载解析。但是,对于转换函数,有一个后门。如果两个转换函数都一样好,那么它们的返回类型将根据
现在什么用户定义的转换序列更好?是第二次检查还是第一次检查?规则是,用户定义的转换序列只有在它们使用相同的转换函数或构造函数时才能进行比较
注意,既然我们不需要
事实上
转换为基类,我们就可以识别
因为我们能否从
如果他们没有关系现在我们假设它们之间没有继承关系。因此,对于第一个函数,我们有以下候选函数
现在我们又有了另一套
因为我们不能转换
|
|
2
24
让我们看看这些步骤来了解它是如何工作的。
从
接下来,让我们看一下重载分辨率。第一个重载是模板实例化
现在看看需要的转换序列。对于第一次过载,我们有
所以,对于相关的B和D,
您现在明白了为什么继承是私有的并不重要了:这种关系只会消除
|
|
3
5
这个
您可以简单地验证这一点:
|
|
|
4
2
这可能与偏序w.r.t.过载解析有关。如果D来自B,则D*比B*更专业化。 具体细节相当复杂。你必须找出各种过载解决规则的先例。偏序就是其中之一。转换序列的长度/种类是另一种。最后,如果两个可行的函数被认为是同样好的,则选择非模板而不是函数模板。
至于私有继承:代码从不要求从D*到B*的转换,这需要公共继承。 |
|
|
5
0
接下来是第二个问题,请注意,如果不是const,如果用B==D实例化,则Host的格式将是错误的。但是is\ base\ of的设计使得每个类都是它自己的一个基,因此其中一个转换运算符必须是const。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |