【问题标题】:Are user-defined default constructors less efficient?用户定义的默认构造函数效率低吗?
【发布时间】:2013-06-01 05:42:39
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

标签: c++ constructor defaulted-functions


【解决方案1】:

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

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

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

【讨论】:

  • “另外请记住,用户定义的默认构造函数与默认构造其所有成员的工作完全不同” - 当然,但我猜这种情况是反正不在讨论范围内。但是关于可能的更大规模优化的要点。
【解决方案2】:

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

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

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

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

【讨论】:

  • "而且我们都知道,如果它是在互联网上写的,那么它一定是对的"我假设它一定是对的,因为字体;) 那是为什么我提到字体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 2016-02-08
  • 2013-02-03
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多