标记所有C ++构造函数是否有任何缺点?

时间:2011-04-18 13:14:44

标签: c++ performance explicit-constructor

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

这有什么缺点吗?性能?编译时间?

3 个答案:

答案 0 :(得分:15)

它没有任何缺点。它将来是安全的,因为在C ++中,0x多参数构造函数使用多元素初始化列表参与初始化,并且禁止在仅使用explicit应用隐式转换的情况下使用。

因此,如果你发现一个给定的多参数构造函数不能逻辑地表示你的类的值,我认为最好使它成为explicit(例如:我会设置一个容器构造函数(size_t size, T defaultValue)explicit,而pair的构造函数,(T first, U second)设置为非显式的。)

答案 1 :(得分:9)

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

答案 2 :(得分:4)

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

我认为声明所有带有参数explicit的构造函数没有坏处,除了对于那些有多个参数的构造函数来说它可能看起来多余。

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