Closed 。这个问题是基于意见的 /help/closed-questions 。目前不接受答案。
所以我们正在进行一些同行评审,这个小小的分歧出现了,
即使默认构造函数什么也不做,是否应该定义它,还是应该让编译器定义它?
到目前为止,双方都无法拿出任何重大的优势或劣势。每种风格的优点和缺点是什么?哪种风格被认为“更干净”?
这可能会被归为“主要基于意见”,但我可以给你一些客观的观点来考虑:
If you don't 定义默认构造函数,然后有人添加带参数的构造函数,却忘记添加无参数构造函数,默认构造函数将消失,这可能会破坏现有代码。显式定义它可以确保即使有人稍后添加重载构造函数,无参数构造函数仍然存在。
如果构造函数在标头中声明并在行外定义(在 .cc/.cpp 文件中),则稍后可以使用依赖代码修改实现,只需重新链接即可。事后声明构造函数必然会影响标头,需要重新编译相关代码。
An empty out-of-line constructor will still need to be called, incurring a small run-time cost, whereas with an implicitly provided default constructor the compiler can see that nothing needs to be done and avoid the call.
显式定义它需要更多的输入并导致更多的代码行。与此相关的成本虽小但非零(输入代码所需的时间以及代码读者阅读代码所需的时间)。
明确定义它会取消该类的资格聚合类 https://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are-they-special ,除非你使用=default在 C++11 中 https://stackoverflow.com/questions/6502828/c-default-keyword-classes-not-switch .
是的,这些观点是矛盾的。我想你会发现流行的opinion is not 明确地定义它,但就语言而言,没有正确或不正确的方法。 (除非你需要你的类型是一个聚合。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)