对于具有指针类型的 CTOR,我们是否需要显式?

Do we need explicit for CTOR with pointer type?

在这种情况下我们需要explicit吗:

class A
{
    explicit A(B* b);
};

我认为即使我们不把构造函数标记为explicit,这样写也会编译错误:

A a = new B(); 

根本不可能通过构造函数从指针隐式转换为对象,对吗?

Do we need explicit for CTOR with pointer type?

这取决于你和你的团队,如果你在团队中工作。它更像是一个编码指南,而不是其他任何东西。语言没有强制要求。

编译失败 从 B*A 的转换将失败。

这正是显式会阻止的事情。

在这种情况下你应该只写 A a( new B() ); 或者如果你想变得更冗长你可以写 A a = A( new B() );

至于根本问题:您是否需要它取决于您和您的团队。通常一个主要问题是:你是否要有一个 'int' 构造函数(将导致与 * 类型的歧义),你想要发生什么,以及你是否希望从构造参数发生隐式转换。

如果您不希望该构造函数可用于隐式转换,则 需要explicit。完全有可能有一个基于构造函数的隐式转换接受一个指针。