3

重複の可能性:
C++0x 右辺値参照の前方定義で ID を使用するのはなぜですか?

std::forward私は本当に興味があります-明示的なテンプレートパラメーターが必要なのはなぜですか? 単純じゃないかな

template<typename T> T forward(T&& ref) {
    return ref;
}

可能であれば、単純化ではなく、関連するすべての詳細が本当に欲しいです。

4

1 に答える 1

6

あなたの実装では、左辺値を右辺値として転送することができません。左辺値 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転送したい。tA t

forward<A>(t);

t左辺値をA&&(右辺値)にキャストします。

于 2011-07-09T16:24:52.590 に答える