为什么构造函数默认不明确?

And*_*hko 15 c++

很容易忘记将构造函数标记为"显式":添加/删除args,使它们成为可选的等等.我知道的唯一可靠方法是将每个构造函数声明为显式,然后仅在设计需要隐式时才删除此关键字(谢谢标准,不仅允许单参数构造函数).但这看起来很难看.

不打算隐式构造函数打开(错误的)隐式转换的使用,例如在这里.这可能是偶然发生的,或者可能会破坏向后兼容性

那么为什么"显式"不是构造函数的默认特性,如果这会导致更少的错误?

ps是的,我读过Stroustrup的"C++的设计和演变",只是不记得他是否说过"明确的"那里

APr*_*mer 14

添加显式时的向后兼容性.语言在不断发展,不断变化的语言中现有结构的含义变化是让用户生气的可靠方法.现在仍然如此,向后兼容性在委员会的头脑中是高的.


Lig*_*ica 10

因为当构思C++时,人们认为没有人会编写愚蠢的代码,并且每个人都会享受到良好的隐式转换会带来的好处,避免在任何地方编写演员表.

当然,这竟然是假的,真的有车的构造所有的地方.真是太遗憾了.

  • +1我认为这总结了我.那么问题就变成了如何处理程序员编写愚蠢的代码?许多人似乎认为语言应该变得更简单,因此愚蠢的程序员不能编写愚蠢的代码.我的观点是,让程序员变得更聪明更好.更好的程序员编写更好的程序. (6认同)