提问人:IRP_HANDLER 提问时间:11/16/2023 最后编辑:IRP_HANDLER 更新时间:11/16/2023 访问量:42
C++ - 使用右值引用 [重复] 时,模板不会推断出适当的类型
C++ - Template won't deduce the appropriate type when using an rvalue reference [duplicate]
问:
我对左值和右值绑定有点困惑,我有以下代码:
void MyFunction( int& value )
{
std::cout << "Lvalue reference: " << value << std::endl;
}
void MyFunction( int&& value )
{
std::cout << "Rvalue reference: " << value << std::endl;
}
template <typename T>
void genericFunction( T&& arg )
{
myFunction( std::forward<T>( arg ) );
// myFunction( arg );
}
int main()
{
int x = 42;
genericFunction( x );
genericFunction( 100 );
}
现在,这工作正常,使用 x 调用 genericFunction 调用 lvalue 变体,同时使用整数文字调用它,调用 r 值变体。
但是,如果我删除 std::forward,它将调用这两个值的左值版本,这是为什么?是因为我的右值引用绑定到左值引用(不确定这是否有意义)?
我设置了一个断点,看到对于第一次调用,T 的推导类型是 int &,这是预期的,而第二次调用中 T 的推导类型是 int&&,这是一个右值引用,那么如果我不使用 std::forward,为什么它会调用 l 值版本?
答: 暂无答案
评论
arg
arg
lvalue
std::forward
std::forward
arg
genericFunction
rvalue
rvalue reference
lvalue reference
rvalue reference
lvalue