对于具有指针类型的 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
。完全有可能有一个基于构造函数的隐式转换接受一个指针。
在这种情况下我们需要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
。完全有可能有一个基于构造函数的隐式转换接受一个指针。