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

概述

  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. 总结

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

最后

以上就是欢呼手套为你收集整理的模板推导数组函数,获取数组长度数组和函数推导数组函数总结的全部内容,希望文章能够帮你解决模板推导数组函数,获取数组长度数组和函数推导数组函数总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部