C++11 为什么没有';tc++;0x不赞成隐式转换?

C++11 为什么没有';tc++;0x不赞成隐式转换?,c++11,implicit-conversion,C++11,Implicit Conversion,为什么C++0x不反对用户定义类型a.k.a.对象的隐式转换?是否有任何项目实际使用此(mis)功能?每当我在代码中看到一个单参数构造函数时,我都会检查或修改它,并将其视为bug并使其显式化。到目前为止,它运行良好,没有人抱怨 多谢各位 编辑:让我引用STL的创建者Alex Stepanov的话: 打开你的C++书籍,阅读有关 显式关键字!也请你 邻里C++标准委员会 议员决定最终废除隐式修正案 转换。有一个共同点 误解,常被传播 那些应该知道得更清楚的人 STL依赖于隐式转换。 不是这样 参考

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

多谢各位

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

打开你的C++书籍,阅读有关 显式关键字!也请你 邻里C++标准委员会 议员决定最终废除隐式修正案 转换。有一个共同点 误解,常被传播 那些应该知道得更清楚的人 STL依赖于隐式转换。 不是这样

参考:


再次编辑:不,不辩论。我只是好奇是否有人在工作中使用隐式转换。我从未见过任何允许对象隐式转换的项目。我想得很仔细,不能假设隐式转换不会成为雷区。我是指C++中的单参数转换,而不是从C.</P> < P>继承的浮点>双或类似转换。显而易见的答案是C++中编写和工作的代码应该继续使用C++ 0x编译器。从语言中删除隐式转换将是一个巨大的突破性改变——即使它是可选的,并且在默认情况下用
implicit
关键字关闭


我已经搜索了COMP.ST.C++,它似乎根本没有被讨论过——尽管在这个问题上有一些问题,但似乎没有人提出去移除它。我当然也不会走这么远:这是我偶尔很乐意使用的一个功能,我也不同意将所有可能的转换构造函数都显式化,除非它会导致真正的错误。

你永远不会将字符串文本传递给参数类型为
std::string
的函数。std::string会成为例外吗?它属于C++标准,编译器可以不同地对待它。你知道有谁对用户定义的类型使用隐式转换吗?我看到人们到处使用显式关键字,甚至在多参数构造函数中也是如此。为了以防万一,许多人将每个构造函数都显式化,因为这样做没有什么坏处。但是隐式转换可能会造成严重的损害。C++的魅力在于,库是相当平等的,不管是标准库还是用户定义的库。我不希望对
std::string
进行特殊处理,我希望能够下载某人的
utf8string
类,并使其与
std::string
一样顺利运行。为什么有人会否决或关闭此问题?在我看来,这是一个有效的答案,尽管答案很简单。(隐式转换是我们从C继承的,它是40年前引入的,它是在30年前扩展了int C++的类型系统的。而那些设计C和C++的人很可能不会再这样做了,我们现在依靠数以百万计的工作代码,这是我们无法打破的。)@sbi:如果语言从零开始重新设计,我认为隐式转换不会消失。可能没有隐式转换,而是像Ronald的回答中提到的那样需要一个
implicit
关键字。但是没有充分的理由认为加宽转换不应保持隐式。您可以使用
,而不是引入另一个关键字!明确的
;)@Fred不会更像他们的风格吗?@Kit:好建议,我喜欢:)弃用并不意味着删除..他们已经确保一些c++03代码不再运行。