19

有几次,在重构代码的explicit时候,给以前的无参构造函数添加参数,或者从以前的多参数构造函数中删除参数时忘记添加关键字。为了防止这种情况,我养成了标记每个构造函数的习惯explicit,不管它有多少参数。(当然,我实际上想要隐式转换的那些构造函数除外。)

这有什么缺点吗?表现?编译时间?

4

3 回答 3

15

它没有任何缺点。它将是未来安全的,因为在 C++0x 中,多参数构造函数使用多元素初始化器列表参与初始化,并且可以禁止在仅使用explicit.

因此,如果您发现给定的多参数构造函数在逻辑上不代表您的类的值,我认为这样做很好explicit(例如:我将容器构造函数设置(size_t size, T defaultValue)为,explicit而 , 的构造函数设置为非显式的) .pair(T first, U second)

于 2011-04-18T13:31:27.277 回答
9

我不确定,但我认为复制构造函数确实会产生一些意想不到的后果explicit。除此之外,我认为你还可以。

于 2011-04-18T13:24:15.167 回答
4

不会有运行时性能差异。编译时间差异可能无法检测到。

我认为用 arguments 声明所有构造函数并没有什么坏处explicit,只是对于那些有多个参数的构造函数来说它可能看起来是多余的。

如果您使用默认构造函数声明类型explicit,则可能无法将其与集合类型一起使用。

于 2011-04-18T13:18:46.047 回答