explicit
在这种情况下我们是否需要:
class A
{
explicit A(B* b);
};
我认为即使我们不将构造函数标记为explicit
,写出来也会是编译错误:
A a = new B();
从指针到对象的隐式转换根本不可能通过构造函数进行,对吧?
explicit
在这种情况下我们是否需要:
class A
{
explicit A(B* b);
};
我认为即使我们不将构造函数标记为explicit
,写出来也会是编译错误:
A a = new B();
从指针到对象的隐式转换根本不可能通过构造函数进行,对吧?
如果您不希望该构造函数可用于隐式转换,则确实需要。explicit
完全有可能让基于构造函数的隐式转换接受指针。
它将无法编译从B*
to转换将失败A
。
这正是显式将阻止的事情。
在这种情况下,您应该只写A a( new B() );
,或者如果您想真正冗长,可以写A a = A( new B() );
至于根本问题:您是否需要它取决于您和您的团队。通常一个主要问题是:你是否会有一个'int'构造函数(会导致与 * 类型的歧义),你想要发生什么,你是否希望从构造参数发生隐式转换。
我们是否需要显式使用指针类型的 CTOR?
如果您在团队中工作,这取决于您和您的团队。它更像是一个编码指南,而不是其他任何东西。语言没有强制要求。