有几次,在重构代码时,我忘记在向以前无参数的构造函数添加参数时添加explicit
关键字,或者从先前的多参数构造函数中删除参数。为了防止这种情况,我养成了标记每个构造函数explicit
的习惯,无论它有多少参数。 (当然,除了那些我实际上想要隐式转换的构造函数。)
这有什么缺点吗?性能?编译时间?
答案 0 :(得分:15)
它没有任何缺点。它将来是安全的,因为在C ++中,0x多参数构造函数使用多元素初始化列表参与初始化,并且禁止在仅使用explicit
应用隐式转换的情况下使用。
因此,如果你发现一个给定的多参数构造函数不能逻辑地表示你的类的值,我认为最好使它成为explicit
(例如:我会设置一个容器构造函数(size_t size, T defaultValue)
为explicit
,而pair
的构造函数,(T first, U second)
设置为非显式的。)
答案 1 :(得分:9)
我不确定,但我认为复制构造函数确实会产生一些意想不到的后果explicit
。除此之外,我认为你没事。
答案 2 :(得分:4)
没有运行时性能差异。编译时差可能无法检测到。
我认为声明所有带有参数explicit
的构造函数没有坏处,除了对于那些有多个参数的构造函数来说它可能看起来多余。
如果使用explicit
默认构造函数声明类型,则可能无法将其与集合类型一起使用。