总的来说,我听说在构造函数上使用带有单个参数的explicit关键字是一种很好的做法。但是,从C ++ 11开始,具有多个参数的构造函数可用于隐式转换。因此,将显式关键字应用于>的所有构造函数是一种好习惯。 0参数?
答案 0 :(得分:0)
显式的一般规则是,您是否希望隐式调用此构造函数?
如果是,请不要明确说明。
如果不是,请明确说明。
对于1个参数ctors,如果从该类型进行转换与在需要时将int
转换为double
一样无损且无害,请将其隐含。
对于> 1参数ctors,确定您是否希望基于{}
的构造工作。有时这是一个好主意,有时候是一个坏主意。
在C ++ 11和14中,需要{}
构造,以便在无法移动或复制类型时从函数返回值。在某些情况下,您将使用标记类型使{}
更明确,如果您因任何原因想避免“隐式{}
使用”,则会更明确。
在C ++ 17中,真正需要{}
的理由较少,因为prvalues不再是对象,而是构造指令;这意味着return T(blah)
不会在返回T
的函数中移动/复制T
,而是从blah
构建它。
何时想要阻止{}
是一个意见问题,不适合SO Q& A.