一言で言えば、ポインターを値で渡すのと 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&
場合、もう 1 つの操作を取得します。
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
2 つではなく 3 つ)、その意味は何ですか? (基本的に、私は生のポインターであるかどうかにかかわらず構造体を持っており、Foo<T>
代わりにT
関数を . にする必要があるかどうか疑問に思っています)。bar(const T&)
bar(typename boost::call_traits<T>::type)