【发布时间】:2010-11-25 10:08:34
【问题描述】:
我今天早上从 D. Kalev 那里读到了这个article 关于新的 c++11 特性“默认和删除函数”的内容,无法理解关于性能的部分,即:
特殊成员函数的手动定义(即使它是微不足道的)通常比隐式定义的效率低。
通过谷歌搜索找到答案,我找到了同一作者的另一个article:
综合构造函数和复制构造函数使实现能够创建比用户编写的代码更高效的代码,因为它可以应用其他方式并不总是可能的优化。
没有解释,但我不时阅读类似的说法。
但那是怎么写的:
class C { C() = default; };
比
更有效率class C { C(){} };
?我虽然编译器足够聪明,可以检测到这种情况并对其进行优化。换句话说,当编译器看到=default 而不是{}(void body 函数)时,如何更容易优化?
编辑:该问题已被编辑以添加“c++11”标签,但此问题仍保留在 c++03 上下文中:只需将 class C {C()=default;}; 替换为 class C {};,因此不是特定于 c++11问题。
【问题讨论】:
-
好问题。我也认为任何不优化它的编译器都是有缺陷的。让我们看看是否有人可以给出一个很好的理由说明为什么这是不可能的。
-
尝试使用 C++1x 编译器生成程序集。这肯定会回答你的问题。我怀疑有什么区别,因为正如你所说,编译器足够聪明。在我看来,像你引用的评论很糟糕,因为它让 C++ 开发人员过多地考虑性能。 99% 的情况下,在考虑愚蠢的微观性能优化之前,还有其他一些品质需要担心。
-
@Daniel:谢谢,但我对组装一无所知,而且我对获得微性能一点也不感兴趣......但我很想知道为什么 会有任何收获,无论是微观的。
-
你确定它们相似吗,意思是,第二个是内联定义,但我不确定第一个。
标签: c++ performance c++11 constructor