我应该定义默认构造函数吗?

use*_*860 9 c++ coding-style

所以我们正在进行一些同行评审,这种轻微的分歧上升了,

是否应该定义默认构造函数,即使它什么也不做,或者我们应该让编译器定义它?

到目前为止,没有任何一方能够提出任何重大优势或劣势.每种风格的优点和缺点是什么,哪一种被认为是"清洁"?

Typ*_*eIA 11

这很可能会以"主要基于意见"的形式结束,但我可以给你一些客观要点:

  • 如果您没有定义默认构造函数,并且某人稍后添加了带参数的构造函数并忘记添加无参数构造函数,则默认构造函数将消失,这可能会破坏现有代码.明确定义它可以确保即使有人稍后添加了重载的构造函数,无参数构造函数仍然存在.

  • 如果构造函数在头文件中声明并且在行外定义(在.cc/.cpp文件中),则稍后可以使用仅需要重新链接的相关代码修改实现.在事实之后声明构造函数必然会影响标题,需要重新编译依赖代码.

    • 仍然需要调用空的外部构造函数,从而产生较小的运行时成本,而使用隐式提供的默认构造函数,编译器可以看到不需要执行任何操作并避免调用.

  • 明确定义它需要更多的输入并产生更多的代码行.与此相关的成本很小但非零成本(输入时间,以及读取代码读取它所花费的时间).

  • 除非您在C++ 11中使用,否则明确定义它会使类无法成为聚合类.=default

是的,这些观点是矛盾的.我想你会发现,当时的舆论明确定义,但只要语言是关心有没有正确或不正确的方式.(除非您需要将您的类型作为聚合.)

  • @ user2079303用户声明!=用户定义.你可以有明确的默认构造函数,它仍然是一个聚合. (2认同)