我是靠谱客的博主 欢呼手套,这篇文章主要介绍模板推导数组函数,获取数组长度数组和函数推导数组函数总结,现在分享给大家,希望可以做个参考。

  1. 数组和函数推导

    • 说明

      • 非引用类型,推导成指针。
      • 引用类型,推导成数组加长度。
    • 注意

      • 数组获取长度是有意义的,不过建议新型数组.
  2. 数组

    • 说明

      • 推导出来长度.
      • 数组和指针,是两个概念,虽然又通用。
      • 数组是长度固定的数组类型, 指针是可以为任意类型任意值的类型.
      • 内部也不方便计算.
    • 案例一

      template<typename T>
      void show(T& a) {
         // error code
         a.nice();
      }
      int main() {
         show("abcsd");
      }
      
      • const char [5]类型.
      • 这里是引用.
    • 案例二

      template<typename T>
      void show(T a) {
         // error code
         a.nice();
      }
      int main() {
         show("abcsd");
      }
      
      • const char*普通类型.值传递的规则.
    • 小结

      • 上面是同样的参数但是不同的类型.
      • 因为无法声明为任意长度数组类型,可以用引用的方式获取具体类型.
    • 问题

      • 固定长度了,但是无法变长,变长了之后就又是指针才支持.
      • 后来C++11推出了一个新的STL,即Array类型.
    • 案例三获取数组长度

      template<typename T,int N>
      void show(T (&a)[N]) {
         // error code
         a.nice();
      }
      int main() {
         show("abcsd");
      }
      
      • T是基本类型,&a表示引用的方式,N表示数组长度。
      • 多一个类型多一份代码.
      • 所以建议用array而不是这种。
    • 长度信息

      • 长度信息是可以在程序编译阶段就可以知道的.
      • 所以可以用下面的机制获取长度.
      template<typename T,int N>
      int show(T (&a)[N]) {
         // error code
         a.nice();
      }
      int main() {
         show("abcsd");
      }
      
    • 改良

      • 用于数组.
      template<typename T,int N>
      constexpr int show(T (&a)[N]) {
         return N;
      }
      int main() {
         char s[show("abcsd")];
      }
      
      • const是需要直接复制的.
      • constexpr可以在编译阶段简单计算.
  3. 函数

    • 说明

      • 函数指针和函数引用没有太大的差别.
    • 简单案例

      template<typename T>
      void show(T&a) {
         // error code
         a.error();
      }
      int main() {
         show(main);
      }
      
      • 引用传递.
      • T = int (void),函数类型,不能修改.
    • 值传递

      template<typename T>
      void show(T a) {
         // error code
         a.error();
      }
      int main() {
         show(main);
      }
      
      • T=int (__cdecl *)(void)
      • 即指针类型.
  4. 总结

    • 可以用模板在编译阶段获取数组类型和对应长度.

最后

以上就是欢呼手套最近收集整理的关于模板推导数组函数,获取数组长度数组和函数推导数组函数总结的全部内容,更多相关模板推导数组函数内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部