C ++ - 竞争演员表/作业

时间:2018-02-26 15:54:13

标签: c++ casting operator-overloading implicit-cast

如果我有2个课程AB,并且希望实现从AB的转换,我可以看到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()可能是个好主意吗?

1 个答案:

答案 0 :(得分:2)

  

如果提供竞争的演员表/作业方法,那么在进行隐式演员表时会先选择哪一个?

根据选择,operator=()将被赋予第一个偏好,因为它不需要转换参数RHS。

  

是否有兴趣实施竞争性演员表/作业方法?

没有。为避免混淆,最好避免这种情况。

  

在类operator =的{​​{1}}强制转换操作符中调用B类的B()可能是个好主意吗?

如果你必须支持两者,那么,是的,这样做是个好主意。