当前位置: 代码迷 >> 综合 >> C++模板类型推导
  详细解决方案

C++模板类型推导

热度:32   发布时间:2024-01-30 03:50:40.0

int x =27;
const int cx = x;
const int& rx = x;

const int* p = &x;

 

1.ParamType是个指针或引用,但不是个万能引用

template<class T>

void f(T& param);

f(x); //T型别是int, param的型别是int&

f(cx); //T型别是const int, param的型别是const int&

f(rx); //T型别是const int, param的型别是const int&

 

template<class T>

void f(const T& param);

f(x); //T型别是int, param的型别是const int&

f(cx); //T型别是int, param的型别是const int&

f(rx); //T型别是int, param的型别是const int&

 

template<class T>

void f(T* param);

f(&x); //T型别是int, param的型别是int*

f(px); //T型别是const int, param的型别是const int*

 

template<class T>

void f(const T* param);

f(&x); //T型别是int, param的型别是int*

f(px); //T型别是int, param的型别是const int*

 

2.ParamType是个万能引用

template<class T>

void f(T&& param);

f(x);//T型别是int&, param的型别是int&

f(cx);//T型别是const int&, param的型别是const int&

f(rx);//T型别是const int&, param的型别是const int&

f(27);//T型别是int, param的型别是int&&

 

3.ParamType既非指针也非引用

template<class T>

void f(T param); //按值传递

f(x);//T型别是int, param的型别是int

f(cx);//T型别是int, param的型别是int

f(rx);//T型别是int, param的型别是int

f(px);//T型别是const int*, param的型别是const int*

 

template<class T>

void f(const T param); //按值传递

f(x);//T型别是int, param的型别是const int

f(cx);//T型别是int, param的型别是const int

f(rx);//T型别是int, param的型别是const int

f(px);//T型别是const int*, param的型别是const int* const

  相关解决方案