0

「完全転送」について読んでいました。これがテンプレートでのみ機能するのはなぜですか:

// example from justsoftwaresolutions  
void g(X&& t); // 2  
void g(X& t);  // 1  

template<typename T>    
void f(T&& t)  
{  
    g(std::forward<T>(t));   
}    


int main()  
{  
    X x;  
    f(x);   // 1  
    f(X()); // 2  
}  

f(x) と f(X()) のテンプレートから生成される関数は何ですか?

std:forward とは

4

1 に答える 1

0

これを読んで、仕組みを理解してくださいstd::forward

「これがテンプレートでしか機能しないのはなぜですか」という質問について。私の理解ではstd::forward、テンプレート関数と非テンプレート関数の両方で機能します。std::forwardただし、非テンプレート関数では使用する必要はありません。例えば

void f(X&& x)
{
    g(std::move(x));
}

上記のコードでは、右辺値参照であると確信しています。そのため、関数への右辺値参照を「リレー」するxために使用します。もちろん、 を使用してそれを行うこともできますが、 よりも優れている可能性は低いと思います。std::move(x)g(X&& x)g(std::forward(x))std::move

于 2012-08-22T02:38:41.060 に答える