用户定义的默认构造函数效率较低吗?

时间:2013-06-05 13:33:59

标签: c++ constructor defaulted-functions

前几天,在阅读Standard C++ news时,我已阅读有关Defaulted functions in C++11的帖子,在该文章中提到用户定义的构造函数效率低于编译器生成的构造函数:

  

用户定义的默认构造函数的效率低于编译器隐式定义的默认构造函数。

继续阅读,有一个例子,其中用户定义的构造函数被标记为默认值,然后说:

  

显式默认构造函数比手动编程的默认构造函数更有效。

我不理解这些断言,所以我想知道:

  • 为什么用户默认构造函数(或特殊成员函数)的效率低于编译器隐式定义的构造函数?
  • 如何通过明确默认构造函数(或特殊成员函数)来提高效率?
  • 选择默认构造函数(或特殊成员函数)以及效率如何影响此决策时必须遵循哪些指导原则?

2 个答案:

答案 0 :(得分:3)

我认为更好的说法是用户定义的默认构造函数 MAY 的效率低于编译器生成的效率。

例如,当它在内部生成默认构造函数时,编译器可能能够对用户定义的构造函数进行假设和优化(会产生副作用)。

还要记住,用户定义的默认构造函数可以执行完全不同的工作,默认构造其所有成员,从而导致效率降低(但也更正确)。但是,在您提供的链接中似乎并非如此。

答案 1 :(得分:0)

我们都知道,如果它是在互联网上写的,那一定是对的......等等,对吗?

在我发现第一个效率较低的断言的文章中,作者说实话。虽然你似乎误解了它 - 在例子中它指的是手工制作的ctor使用赋值。没有充分理由,反对二十年前的指导方针。

下一个例子,同样的情况。 (作为一个实际的注释,我将补充说,对于声称有优化的任何编译器,我希望即使对于那个表单也有相同的组合输出......)

我认为没有理由为什么正确的手写ctor会以任何方式与默认的不同,包括效率。 OTOH如果他们是相同的,为什么在地球上写它?我很高兴编译器能为我做到这一点。最后我甚至可以通过以前无法控制的方式来控制它。可以使用更多这样的功能。 ; - )