我们是否需要使用指针类型明确表示CTOR?

时间:2015-08-24 15:20:19

标签: c++ explicit explicit-constructor

在这种情况下我们需要explicit

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

我认为即使我们没有将构造函数标记为explicit,也会出现编译错误:

A a = new B(); 

根本无法通过构造函数从指针到对象的隐式转换,对吗?

3 个答案:

答案 0 :(得分:1)

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

这正是明确会阻止的那种。

你应该在这种情况下写A a( new B() );,或者如果你想真正详细,你可以写A a = A( new B() );

关于根本问题:你是否需要它取决于你和你的团队。一般来说,一个主要的问题是:你是否会有一个' int'构造函数(会导致与*类型的混淆),你想要发生什么,并且你想要从构造参数发生隐式转换。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

  

我们是否需要使用指针类型明确CTOR?

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