为什么C ++ 0x不支持隐式转换?

时间:2011-05-01 23:36:32

标签: c++11 implicit-conversion

为什么C ++ 0x不支持用户定义类型a.k.a.对象的隐式转换?是否有任何项目实际使用此(错误)功能?每当我在代码中看到单个参数构造函数时,我就会进行检查或修改,我将其视为bug并使其明确。到目前为止,它运作良好,没有人抱怨。

谢谢。

编辑:让我引用STL的创建者Alex Stepanov:

  

打开你的C ++书籍并阅读   显式关键字!还请你的   邻里C ++标准委员会   成员最终取消隐含   转换。有一个共同点   误解,经常传播   那些应该知道更好的人   STL依赖于隐式转换。   不是这样!

参考:A. Stepanov. C++ notes

再次编辑:不,没有辩论。我只是好奇是否有人在他们的工作中使用隐式转换。我从未见过任何允许隐式转换对象的项目。我认真思考并且没有任何假设的场景,其中隐性转换不会成为雷区。我指的是C ++单参数转换,而不是浮点数 - >从C继承的双重或类似转换。

2 个答案:

答案 0 :(得分:7)

显而易见的答案是,在C ++ 03中编写和使用的代码应该继续使用C ++ 0x编译器。

答案 1 :(得分:2)

首先,从语言中删除隐式转换将是一个非常重大的变化 - 即使它是可选的,并且默认情况下使用implicit关键字。

我已经对comp.std.c ++进行了搜索,但在该组中似乎没有进行过任何讨论 - 虽然在这个问题上有一些问题,似乎没有人建议这么做除去它。我肯定也不会走得那么远:这是我很乐意偶尔使用的一个功能,我也不会订阅所有可能转换的构造函数explicit - 除非它导致真正的错误。