gpt4 book ai didi

c++ - 按值或 const ref 传递指针?

转载 作者:太空狗 更新时间:2023-10-29 19:52:48 27 4
gpt4 key购买 nike

简而言之,按值传递指针还是按常量引用传递指针更好?

我写了一个简单的函数来探索:

void foo(int* v) { std::cout << *v << endl; }

对比

void foo(int* const& v) { std::cout << *v << endl; }

我试着查看生成的程序集,但我不是特别擅长汇编,所以我不确定我是否理解其中的区别。但有一点不同。在第一种情况下,我们得到:

pushq   %rbp
pushq %rbx
subq $8, %rsp
movl (%rdi), %esi
movl std::cout, %edi
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)

const&情况下,我们再进行一次操作:

pushq   %rbp
pushq %rbx
subq $8, %rsp
movq (%rdi), %rax
movl std::cout, %edi
movl (%rax), %esi
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)

这种差异意味着什么(三个 mov 而不是两个),这意味着什么? (基本上,我有一个结构 Foo<T>,其中 T 可能是原始指针,我想知道我的函数 bar(const T&) 是否应该改为 bar(typename boost::call_traits<T>::type) 。)。

最佳答案

按值传递指针,除非您需要引用语义。

按引用传递几乎肯定是通过传递指针来实现的。您将传递与指针本身相同数量的数据,但会引入额外的间接级别,因此它的效率可能低于按值传递。

话虽如此,差异可能很小;所以对于通用代码,通过 const 引用传递更简单,除非你真的需要在单指令级别进行微优化。如果你这样做,正如你所说,boost::call_traits 可以提供帮助。

关于c++ - 按值或 const ref 传递指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19710349/

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