1

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

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

我认为即使我们不将构造函数标记为explicit,写出来也会是编译错误:

A a = new B(); 

从指针到对象的隐式转换根本不可能通过构造函数进行,对吧?

4

3 回答 3

1

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

于 2015-08-24T15:40:05.440 回答
1

它将无法编译从B*to转换将失败A

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

在这种情况下,您应该只写A a( new B() );,或者如果您想真正冗长,可以写A a = A( new B() );

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

于 2015-08-24T15:29:52.860 回答
0

我们是否需要显式使用指针类型的 CTOR?

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

于 2015-08-24T15:27:25.680 回答