C++11中的explicit关键字和有多个参数的构造函数

3

一般来说,我听说在只有一个参数的构造函数中使用explicit关键字是一种好的做法。然而,自C++11以来,具有多个参数的构造函数可以用于隐式转换。因此,将explicit关键字应用于所有大于0个参数的构造函数是否是一种好的做法?

1个回答

0

对于显式构造函数的一般规则是,你想要这个构造函数被隐式调用吗?

如果是,就不要将其设置为显式。

如果不是,就将其设置为显式。

对于只有一个参数的构造函数,如果从该类型进行转换与将一个int转换为double一样没有损失和无害,那么将其设置为隐式。

对于有多个参数的构造函数,确定是否希望基于{}的构造工作。有时候这是一个好主意,有时候则不是。

在C++11和14中,当类型无法移动或复制时,需要使用{}构造函数才能从函数返回值。在某些情况下,您将使用标记类型使{}比通常更明确,以避免由于某种原因而出现“隐式{}使用”。

在C++17中,真正需要{}的原因较少,因为prvalues不再是对象,而是构造指令;这意味着return T(blah)在返回T的函数中不会移动/复制T,而是直接从blah构造它。

关于何时阻止{}的问题,这是一个主观的问题,不适合在SO Q&A上讨论。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接