为什么C ++ 0x不支持用户定义类型a.k.a.对象的隐式转换?是否有任何项目实际使用此(错误)功能?每当我在代码中看到单个参数构造函数时,我就会进行检查或修改,我将其视为bug并使其明确。到目前为止,它运作良好,没有人抱怨。
谢谢。
编辑:让我引用STL的创建者Alex Stepanov:
打开你的C ++书籍并阅读 显式关键字!还请你的 邻里C ++标准委员会 成员最终取消隐含 转换。有一个共同点 误解,经常传播 那些应该知道更好的人 STL依赖于隐式转换。 不是这样!
再次编辑:不,没有辩论。我只是好奇是否有人在他们的工作中使用隐式转换。我从未见过任何允许隐式转换对象的项目。我认真思考并且没有任何假设的场景,其中隐性转换不会成为雷区。我指的是C ++单参数转换,而不是浮点数 - >从C继承的双重或类似转换。
答案 0 :(得分:7)
显而易见的答案是,在C ++ 03中编写和使用的代码应该继续使用C ++ 0x编译器。
答案 1 :(得分:2)
首先,从语言中删除隐式转换将是一个非常重大的变化 - 即使它是可选的,并且默认情况下使用implicit
关键字。
我已经对comp.std.c ++进行了搜索,但在该组中似乎没有进行过任何讨论 - 虽然在这个问题上有一些问题,似乎没有人建议这么做除去它。我肯定也不会走得那么远:这是我很乐意偶尔使用的一个功能,我也不会订阅所有可能转换的构造函数explicit
- 除非它导致真正的错误。