假设我们有一个过程
我们希望这样调用它:
void f(X2);
。进一步假设我们有类型 X1
和 X2
,它们没有共享继承层次结构。我们希望这样调用它:
f(X1 {})
,并且让 X1
隐式转换为 X2
。我们有两种实现此目的的选项:struct X2 {};
struct X1 { operator X2(); };
struct X1 {};
struct X2 { X2(const X1&); };
就实现而言,这两种方式在定义顺序和访问私有数据的方式上存在实际差异。
但是从用户的角度来看,这两种方法是否会有不同的行为?如果有,哪一种更可取?
即使我们将两者都标记为explicit
,这个问题仍然保持不变。唯一的区别是,在前一种情况下只能通过构造函数进行转换,而static_cast
可以同时使用两种方法。
std::string
,但反过来是可以的,并且是标准库的一部分。我面临的用例与此非常相似。 - Post SelfX2
的公共构造函数。 - Post Self