[英]rvalue reference template deduction
template<class U>
void f( U && v)
{
std::cout << typeid(v).name() << "\n"; //'int' in both cases
if( boost::is_same<int&&,U>::value )
{
std::cout << "reach here\n"; //only with f<int&&>(int(1));
}
}
int main()
{
f(int(1));
f<int&&>(int(1));
std::cin.ignore();
}
当我没有显式使用f<int&&>
时,为什么v参数被解释为int
? 有什么区别 ? (用MVS2010编译)
我的猜测是,First作为右值传递,第二个作为右值参考传递,并且两者都正确绑定到右值参考中,我是对的吗?
谢谢。
不,不是真的。 永远不会推导出右值参考。 使用U
作为可推导模板参数的概念U&&
用于表示应推导出U
,以便保留参数的rvalue-ness:
X
的右值时, U
的类型变为X
X
的cv限定左值时,则U
成为类型X cv&
。 更有趣的问题是在第二次调用中明确指定的rvalue引用发生了什么,因为没有进行推导,因为在这种情况下,两个rvalue引用只折叠成一个。
f(int(1)) <=> f<int>(int(1)) <=> U==int <=> is_same<int&&,int> == false
f<int&&>(int(1)) <=> U==int&& is_same<int&&,int&&> == true
像这样
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.