gpt4 book ai didi

c++ - 为什么我们不在函数中通过引用传递 POD?

转载 作者:太空狗 更新时间:2023-10-29 19:39:45 26 4
gpt4 key购买 nike

我一直被告知我们不应该通过引用传递 POD。但最近我发现引用实际上根本不占用内存。

那么为什么我们选择写:

void DoSomething(int iNumber);

代替:

void DoSomething(const int& riNumber);

这样不是更有效率吗?

最佳答案

实际上在这种情况下(使用 int)按值传递可能更有效,因为只需要 1 次内存读取而不是 2 次来访问传递的值。

示例(使用 -O2 优化):

int gl = 0;

void f1(int i)
{
gl = i + 1;
}

void f2(const int& r)
{
gl = r + 1;
}

int main()
{
f1(1);

f2(1);
}

汇编语言

    .file   "main.cpp"
.text
.p2align 2,,3
.globl __Z2f1i
.def __Z2f1i; .scl 2; .type 32; .endef
__Z2f1i:
LFB0:
pushl %ebp
LCFI0:
movl %esp, %ebp
LCFI1:
movl 8(%ebp), %eax
incl %eax
movl %eax, _gl
leave
ret
LFE0:
.p2align 2,,3
.globl __Z2f2RKi
.def __Z2f2RKi; .scl 2; .type 32; .endef
__Z2f2RKi:
LFB1:
pushl %ebp
LCFI2:
movl %esp, %ebp
LCFI3:
movl 8(%ebp), %eax
movl (%eax), %eax
incl %eax
movl %eax, _gl
leave
ret
LFE1:
.def ___main; .scl 2; .type 32; .endef
.p2align 2,,3
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
LFB2:
pushl %ebp
LCFI4:
movl %esp, %ebp
LCFI5:
andl $-16, %esp
LCFI6:
call ___main
movl $2, _gl
xorl %eax, %eax
leave
ret
LFE2:
.globl _gl
.bss
.align 4
_gl:
.space 4

关于c++ - 为什么我们不在函数中通过引用传递 POD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7561690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com