4

C ++ 98では、テンプレート関数でcall_traitsを使用して、パラメーターを渡すための最良の方法を自動的に選択することに慣れました。例:

template<class T>
void foo(typename boost::call_traits<T>::param_type arg)
{
    // .. do stuff with arg ..
}

利点は、プリミティブの場合は値を渡し、より複雑なオブジェクトの場合は参照を渡すため、オーバーヘッドを最小限に抑えることができることです。C ++ 11には、「ユニバーサル参照」の概念があります。

template<class T>
void foo(T&& arg)
{
    // .. do stuff with arg ..
}

私が理解しているように、std :: forwardで完全な転送を行うには、ユニバーサルリファレンスを使用する必要があります。したがって、それを使用する場合は、選択が明確です。しかし、私がそうするつもりがないとき、私はどちらを好むべきですか?ユニバーサルリファレンスは常に同じかそれ以上になりますか?

4

0 に答える 0