0

これに重複する可能性があります。

私はEffective Modern C++を読みました。でItem 1、ユニバーサル リファレンスのケースを見つけました。 最後の例では、VS2013 でテストを行いました。ここに画像の説明を入力

f(27);

void process(int& x)
{
    std::cout << "int&" << std::endl;
}
void process(int&& x)
{
    std::cout << "int&&" << std::endl;
}
template<typename T>
void f(T&& param)
{
    std::cout << "------------------------------------------------" << std::endl;
    if (std::is_lvalue_reference<T>::value)
    {
        std::cout << "T is lvalue reference" << std::endl;
    }
    else if (std::is_rvalue_reference<T>::value)
    {
        std::cout << "T is rvalue reference" << std::endl;
    }
    else
    {
        std::cout << "T is NOT lvalue reference" << std::endl;
    }
    std::cout << "param is: " << typeid(param).name() << std::endl;

    process(std::forward<T>(param));
    process(param);
}
int getINT()
{
    int x = 10;
    return x;
}
int _tmain(int argc, _TCHAR* argv[])
{   
    f(10);
    f(getINT());

    return 0;

}

出力は次のとおりです。

------------------------------------------------
T is NOT lvalue reference
param is: int
int&&
int&
------------------------------------------------
T is NOT lvalue reference
param is: int
int&&
int&

std::forward<T>(param)テンプレート関数内で、 withoutがprocess(int& x)呼び出されることがわかりましたが、本によると、型はparam右辺値参照でprocess(int&& x)なければならないので、呼び出す必要があります。しかし、そうではありません。私は何かを誤解していますか?他のスレッド

から見つけた転送リファレンスは次のとおりです。 ここに画像の説明を入力

4

1 に答える 1