gpt4 book ai didi

C++ - 竞争性类型转换/作业

转载 作者:太空狗 更新时间:2023-10-29 21:33:56 26 4
gpt4 key购买 nike

如果我有 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

现在假设我实现了这两个函数(在类 A 中转换为 B 并从 A 转换为 operator =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 具有相同的效果(甚至不同的效果,为什么不呢)。

我的问题是:

  • 如果提供了相互竞争的强制转换/赋值方法,那么在进行隐式强制转换时会首先选择哪个?
  • 是否有兴趣实现这两种相互竞争的转换/分配方法?
  • 也许在 B() 中调用类 Boperator = 是一个好主意 cast operator of class ?

最佳答案

If competing cast/assignment methods are provided, which one would be chosen first when doing implicit cast?

鉴于选择,operator=() 将被优先考虑,因为它不需要转换参数 RHS。

Is there any interest implementing both competing cast/assignment methods?

没有。最好避免这种情况,以免造成混淆。

Perhaps this would even be a good idea to call operator = of class B in B() cast operator of class A?

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

关于C++ - 竞争性类型转换/作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48992242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com