为什么T不会推断为int && here

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 &&这对我来说也是有意义的!

Bar*_*rry 7

为什么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)


Rei*_*ica 7

它为什么要演绎到int&&?请注意,参数的类型T &&不是T.所以:

  • 所需的参数最终类型(类型推导的乘积)是int &&.
  • 参数的形式是T &&.
  • 什么是最简单的T,从而T &&int &&

答案:int.