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

Dav*_*eer 19 c++ performance explicit-constructor

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

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

Joh*_*itb 15

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

所以,如果你找到一个给多参数的构造函数逻辑上并不代表你的类的价值,我觉得这是很好的使explicit(例如:我会成立一个容器构造(size_t size, T defaultValue)explicit,而构造pair,(T first, U second)设置成非显性) .


Jam*_*nze 9

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