c++11:模板

c++11中Universal Reference类型的模板参数的推导规则?

Universal References in C++11

简单来说就是type&& + syntax + type deduction,即可以引用左值,也可以引用右值。 

template<typename T>
void f(T&& param); // “&&” 可能 代表rvalue reference

如果一个变量或者参数被声明为T&&,其中T是被推导的类型,那这个变量或者参数就是一个universal reference

“T需要是一个被推导类型”这个要求限制了universal references的出现范围。在实践当中,几乎所有的universal references都是函数模板的参数。因为auto声明的变量的类型推导规则本质上和模板是一样的,所以使用auto的时候你也可能得到一个universal references。

一个universal reference必须具有形如T&&。

和所有的引用一样,你必须对universal references进行初始化,而且正是universal reference的initializer决定了它到底代表的是lvalue reference 还是 rvalue reference:

  • 如果用来初始化universal reference的表达式是一个左值,那么universal reference就变成lvalue reference。
  • 如果用来初始化universal reference的表达式是一个右值,那么universal reference就变成rvalue reference。

Effective Modern C++ 条款1 理解模板类型推断

C++11之经典书籍和网文推荐

原文地址:https://www.cnblogs.com/losophy/p/10599424.html