hello 模板函数

醉酒当歌 提交于 2020-03-10 15:18:38

参考

https://www.cnblogs.com/zhangnianyong/p/11896309.html

如果一个地方即有左值引用,又有右值引用,而且功能函数内容相同,这样就要写两遍代码,问题变得更麻烦了,如:

  #include <iostream>

  void Func(const i &){

    std::cout << i << std::endl;

  }

  void Func(int i&){

    std::cout << i << std::endl;

  }

  void Func(int &&i){

    std::cout << i << std::endl;

  }

  int main()

  {

    int a = 1;

    const int b = a;

    Func(b);//调用Func(const int &i);

    Func(a);//调用Func(int &i);

    Func(1);//调用Func(int && i);

  }

  为了解决这个问题,在模板函数上添加了一个完美转发语法,这样上面的几个函数可以合成一个函数, 如:

  template <typename T>

  void Func(T && t)

  {

    std::cout << t << std::endl;

  }

  注:这里的&&已经不是右值引用了,而是被称为万能引用(universal references),而这种用法称为完美转发

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!