当前位置: 首页 > news >正文

19.5、C++11新特性有哪些⑤【模板的改进】

模板的改进
  • 模板的右尖括号

    C++11之前是不允许两个右尖括号出现的,会被认为是右移操作符,所以需要中间加个空格进行分割,避免发生编译错误。

  int main() {
     std::vector<std::vector<int>> a; // error
     std::vector<std::vector<int> > b; // ok
  }
  • 模板的别名(using)

    C++11引入了using,可以轻松的定义别名,而不是使用繁琐的typedef,更容易看懂了

  //1.模板的别名
  typedef std::vector<std::vector<int>> vvi; // before c++11
  using vvi = std::vector<std::vector<int>>; // c++11
  
  //2.定义函数指针(不推荐这样做)
  typedef void (*func)(int, int); // 啥玩意,看不懂
  using func = void (*)(int, int); // 起码比typedef容易看的懂吧
  • 函数模板的默认模板参数

    C++11之前只有 类模板 支持 默认模板参数,函数模板是不支持默认模板参数的,C++11后都支持

  template <typename T, typename U=int>
  class A {
      T value;  
  };
  
  //类模板的默认模板参数必须从右往左定义,而函数模板则没有这个限制。
  template <typename T=int, typename U> // error
  class A {
      T value;  
  };
  
  //默认函数模板使用规则是 如果能够从函数实参中推导出类型的话,则函数模板的默认模板参数则不会被使用;反之,默认模板参数则可能被使用
  template <typename R, typename U=int>
  R func1(U val) {
     return val;
  }
  
  template <typename R=int, typename U>
  R func2(U val) {
     return val;
  }
  
  int main() {
     cout << func1<int, double>(99.9) << endl; // 99
     cout << func1<double, double>(99.9) << endl; // 99.9
     cout << func1<double>(99.9) << endl; // 99.9
     cout << func1<int>(99.9) << endl; // 99
     cout << func2<int, double>(99.9) << endl; // 99
     cout << func2<double>(99.9) << endl; // 99.9
     cout << func2<int>(99.9) << endl; // 99
     return 0;
  }

相关文章:

  • 科技查新有不通过的情况吗?为什么?
  • JAVA网络协议1
  • C++蓝桥杯基础篇(七)
  • 在单片机上部署的 k3s - agent 中遇到 `Failed to create pod sandbox` 错误
  • windows系统中大容量硬盘分区为1TB的方法
  • ECU抽象-I/O硬件抽象
  • 40岁开始学Java:Java中单例模式(Singleton Pattern),适用场景有哪些?
  • 【星云 Orbit • STM32F4】08. 用判断数据头来接收据的串口通用程序框架
  • K8S学习之基础六:k8s中pod亲和性
  • qt实践教学(编写一个代码生成工具)持续更新至完成———
  • 力扣:1.两数之和(O(n)复杂度)
  • [Computer Vision]实验七:图像检索
  • 摄像头应用编程(四):ARM Linux LCD实时预览UVC摄像头画面
  • 摄像头应用编程(三):多平面视频采集
  • 009---基于Verilog HDL的单比特信号边沿检测
  • 【前端】在WebStorm中安装Node.js与nvm与npm的详细过程
  • 第15届 蓝桥杯 C++编程青少组中级省赛 202408 真题答案及解析
  • 从新加坡《Companion Guide on Securing AI Systems 》看可信AI全生命周期防护框架构建
  • SOUI基于Zint生成EAN码
  • QT-信号与槽
  • 大型长读长RNA测序数据集发布,有助制定精准诊疗策略
  • 日本大米价格连续16周上涨,再创最高纪录
  • 见证上海援藏30年成果,萨迦非遗珍品展来沪
  • 中央纪委办公厅公开通报3起整治形式主义为基层减负典型问题
  • 葛兰西:“生活就是抵抗”
  • 巴达玛·利斯瓦达恭当选世界羽联主席,张军任理事会理事