作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一般来说,我听说在带有单个参数的构造函数上使用 explicit 关键字是一种很好的做法。然而,从 C++11 开始,具有多个参数的构造函数可用于隐式转换。因此,将 explicit 关键字应用于 > 0 个参数的所有构造函数是否是一种好习惯?
最佳答案
explicit 的一般规则是,是否要隐式调用此构造函数?
如果是,请不要明示。
如果不是,请明确说明。
对于 1 个参数的 ctors,如果从该类型转换与在需要时将 int
转换为 double
一样无损且无害,则将其设为隐式。
对于 >1 个参数构造函数,确定您是否希望基于 {}
的构造起作用。有时这是个好主意,有时是个坏主意。
在 C++11 和 14 中,需要构造 {}
以便在无法移动或复制类型时从函数返回值。在某些情况下,如果您想出于任何原因避免“隐式 {}
使用”,您将使用标记类型使 {}
比其他方式更明确.
在 C++17 中,真正需要 {}
的理由越来越少,因为纯右值不再是对象,而是构造指令;这意味着 return T(blah)
不会在返回 T
的函数中移动/复制 T
,而是直接从 构造它>废话
。
什么时候你想阻止 {}
是一个见仁见智的问题,不适合 SO 问答。
关于c++11 - C++11 的显式关键字和多参数构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45196333/
我是一名优秀的程序员,十分优秀!