相关疑难解决方法(0)

为什么隐式生成的构造函数(等)比用户定义的(普通的)更有效?

我读这文章今天上午从D.卡莱弗关于新的C++ 11功能"拖欠或删除功能",并且无法理解有关性能,即部分:

特殊成员函数的手动定义(即使它是微不足道的)通常比隐式定义的函数效率低.

通过谷歌搜索找到答案,我找到了同一作者的另一篇文章:

合成的构造函数和复制构造函数使实现能够创建比用户编写的代码更高效的代码,因为它可以应用其他方式并不总是可行的优化.

没有解释,但我不时阅读类似的说法.

但是如何写作:

class C { C() = default; };
Run Code Online (Sandbox Code Playgroud)

可以更有效率

class C { C(){} };
Run Code Online (Sandbox Code Playgroud)

?我虽然编译器足够聪明,可以检测到这种情况并对其进行优化.换句话说,编译器在看到=default而不是{}(void body function)时如何更容易优化?

编辑:编辑问题是为了添加"c ++ 11"标签,但这个问题仍然存在于c ++ 03上下文中:只是替换class C {C()=default;};class C {};,所以不是真正的c ++ 11特定问题.

c++ performance constructor c++11

11
推荐指数
3
解决办法
358
查看次数

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

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

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

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

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

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

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

c++ constructor defaulted-functions

8
推荐指数
1
解决办法
199
查看次数