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