lsb*_*bbo 3 c++ templates rvalue
以下是功能模板
template <class T>
void func(T&& t) {
}
func(4); // 4 is rvalue and T deduces to int
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么T不推导到int &&?
我的意思是,如果T推断为int &&
所以int && && - > int &&这对我来说也是有意义的!
为什么
T不演绎int&&?
如果模板参数是引用,则在考虑如何进行演绎之前,通常会删除引用(例外情况是在针对左值,函数和数组推导时转发引用).
在这种情况下,T推导出来4,这是一个int,所以T推断为int.结果类型T&&是int&&.
请注意,表达式从不具有引用类型.4是一个类型的右值int,它不是一个int&&.
这与演绎的工作方式一致:
template <class T> void foo(T );
template <class T> void bar(T const& );
foo(4); // calls foo<int>, not foo<int&&>
bar(4); // calls bar<int>, not bar<int const&>
Run Code Online (Sandbox Code Playgroud)
它为什么要演绎到int&&?请注意,参数的类型T &&不是T.所以:
int &&.T &&.T,从而T &&是int &&?答案:int.