std::forward
私は本当に興味があります-明示的なテンプレートパラメーターが必要なのはなぜですか? 単純じゃないかな
template<typename T> T forward(T&& ref) {
return ref;
}
可能であれば、単純化ではなく、関連するすべての詳細が本当に欲しいです。
std::forward
私は本当に興味があります-明示的なテンプレートパラメーターが必要なのはなぜですか? 単純じゃないかな
template<typename T> T forward(T&& ref) {
return ref;
}
可能であれば、単純化ではなく、関連するすべての詳細が本当に欲しいです。
あなたの実装では、左辺値を右辺値として転送することができません。左辺値 A を使用すると、T は A& として推定されるため、A& は戻り値の型 (左辺値) になります。
適用可能なユースケースのリストについては、N2951を参照してくださいforward
。
左辺値を右辺値として転送する必要性は、完璧な転送のユース ケースで発生します。
template <class T>
void bar(T&& t);
template <class T>
void foo(T&& t)
{
bar(std::forward<T>(t));
}
内部foo
t
は常に左辺値です。ケースを考えてみましょうfoo(A())
。 T
として推定し、左辺値であっても右辺値としてA
転送したい。t
A
t
forward<A>(t);
t
左辺値をA&&
(右辺値)にキャストします。