小编Chr*_*nis的帖子

明确默认的复制ctor生成的代码比手写的等效代码更好

我看到生成的代码有所不同,这取决于我是否显式默认复制构造函数,或者手写同样的东西.它是一个简单的类,只保存一个int并在其上定义一些算术运算符.

clang和g ++都以类似的方式处理这种情况,因此它让我想知道是否存在基础语言要求,如果是这样,它在做什么?如果可能的话,寻找标准中的引用.:)

为了展示这一点,我用两种方式编写了average()函数,在原始intHolders上运行.我希望这两个代码生成相同的代码.这是输出:

明确默认的复制构造函数:

average(Holder, Holder):
  add esi, edi
  mov eax, esi
  shr eax, 31
  add eax, esi
  sar eax
  ret
average(int, int):
  add esi, edi
  mov eax, esi
  shr eax, 31
  add eax, esi
  sar eax
  ret
Run Code Online (Sandbox Code Playgroud)

一样的!太棒了吧?当我忘记"默认"实现时,问题出现了,只需手写版本即可.到目前为止,我的印象是它应该具有与默认代码相同的结果代码,但事实并非如此.

手写的复制构造函数

average(Holder, Holder):
  mov edx, DWORD PTR [rdx]
  mov ecx, DWORD PTR [rsi]
  mov rax, rdi
  add ecx, edx
  mov edx, ecx
  shr edx, 31
  add edx, ecx
  sar edx …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer

14
推荐指数
1
解决办法
203
查看次数

标签 统计

c++ ×1

language-lawyer ×1