8

几天前,在阅读标准 C++ 新闻时,我阅读了有关C++11 中的默认函数的帖子,在那篇文章中提到用户定义的构造函数比编译器生成的构造函数效率低:

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

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

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

我不明白这些断言,所以我想知道:

  • 为什么用户默认构造函数(或特殊成员函数)的效率低于编译器隐式定义的构造函数?
  • 通过显式默认构造函数(或特殊成员函数)如何提高效率?
  • 我必须遵循哪些准则来选择默认构造函数(或特殊成员函数)以及效率如何影响这个决定?
4

2 回答 2

4

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

例如,当它在内部生成默认构造函数时,编译器可能能够做出它不能为用户定义的构造函数做出的假设和优化(想到副作用)。

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

于 2013-06-05T13:39:13.810 回答
0

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

在我发现效率较低的第一个断言的文章中,作者说的是实话。尽管您似乎误解了它——在示例中它指的是手工制作的 ctor 使用分配。没有充分的理由,并且违反了 2 年历史的准则。

下一个例子,同样的情况。(作为一个实用说明,我要补充一点,对于任何声称有优化的编译器,即使对于那种形式,我也希望得到相同的组件输出......)

我看不出为什么正确的手写 ctor 会在任何方面与默认的不同,包括效率。OTOH,如果它们相同,为什么要写它?我很高兴编译器为我做了它。最后,我什至可以用一些以前无法控制的方式来控制它。可以使用更多这样的功能。;-)

于 2013-06-05T13:57:42.007 回答