【发布时间】:2012-08-01 07:04:24
【问题描述】:
在 C#、C++ 和 Java 中,当您创建带参数的构造函数时,默认的无参数构造函数会消失。我一直只是接受这个事实,但现在我开始想知道为什么。
这种行为的原因是什么?这只是一种“安全措施/猜测”,说“如果您创建了自己的构造函数,您可能不希望这个隐含的构造函数存在”? 还是有技术原因导致编译器无法在您自己创建构造函数后添加?
【问题讨论】:
-
您可以将 C++ 添加到具有此行为的语言列表中。
-
在 C++ 中,您现在可以说
Foo() = default;以恢复默认值。 -
如果你的带参数构造器可以有所有参数的默认参数,那么它会与内置的无参数构造器冲突,因此需要在创建时将其删除。
-
想象一下出现在第一个编译器的创始人之间的辩论中,以制定默认构造函数要求以及它会激发的激烈讨论。
-
@HenkHolterman C++ 不仅仅是另一个具有这种行为的,而是它的发起者,它允许 C 兼容性,正如 Stroustrup 在 The Design and Evolution of C++ 中所讨论的那样正如我更新的答案中所总结的那样。
标签: c# java c++ default-constructor