如果我有2个课程A
和B
,并且希望实现从A
到B
的转换,我可以看到2种可能性。
class A {
// Some attributes, methods
operator B() const {
// Conversion from A to B
}
}
class B {
// Some attributes, methods
}
class A {
// Some attributes, methods
}
class B {
// Some attributes, methods
B& operator =(const A& src) {
// Conversion from A to B
}
}
这两种方法都允许运行以下代码:
A instA;
B instB;
instB = instA; // Ok
现在让我们假设我实现了两个函数(在类B
中转换为A
而在类operator =
中从A
转换为B
:
class A {
// Some attributes, methods
operator B() const {
// Conversion from A to B - Code 1
}
}
class B {
// Some attributes, methods
B& operator =(const A& src) {
// Conversion from A to B - Code 2
}
}
假设代码1 和代码2 具有相同的效果(甚至不同的效果,为什么不呢)。
我的问题是:
operator =
的{{1}}强制转换操作符中调用B
类的B()
可能是个好主意吗?答案 0 :(得分:2)
如果提供竞争的演员表/作业方法,那么在进行隐式演员表时会先选择哪一个?
根据选择,operator=()
将被赋予第一个偏好,因为它不需要转换参数RHS。
是否有兴趣实施竞争性演员表/作业方法?
没有。为避免混淆,最好避免这种情况。
在类
operator =
的{{1}}强制转换操作符中调用B
类的B()
可能是个好主意吗?
如果你必须支持两者,那么,是的,这样做是个好主意。