简而言之,按值传递指针还是通过 const 引用传递指针更好?
我写了一个简单的函数来探索:
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)