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之经典书籍和网文推荐

posted @ 2019-03-26 12:51  _raindrop  阅读(827)  评论(0编辑  收藏  举报