开发者社区> 问答> 正文

有人可以解释这个给我数组大小的模板代码吗?

template<typename T, size_t n> size_t array_size(const T (&)[n]) { return n; } 我没有得到的部分是此模板函数的参数。当我通过数组传递数组中n的元素数量时,数组会发生什么?

展开
收起
保持可爱mmm 2020-02-09 13:42:58 520 0
1 条回答
写回答
取消 提交回答
  • 好吧,首先,您必须了解,尝试从数组中获取值可以为您提供指向其第一个元素的指针:

    int a[] = {1, 2, 3}; int *ap = a; // a pointer, size is lost int (&ar)[3] = a; // a reference to the array, size is not lost 引用使用其确切类型或基类类型引用对象。关键是模板通过引用获取数组。作为参数的数组(不引用它们)在C ++中不存在。如果为参数提供数组类型,它将改为一个指针。因此,当我们想知道传递的数组的大小时,必须使用引用。大小和元素类型会自动推导出,这通常是功能模板的情况。以下模板

    template<typename T, size_t n> size_t array_size(const T (&)[n]) { return n; } 用我们先前定义的数组调用a将隐式实例化以下函数:

    size_t array_size(const int (&)[3]) { return 3; } 可以这样使用:

    size_t size_of_a = array_size(a); 我前段时间做了一个变体[编辑:原来有人在这里有相同的想法],可以在编译时确定一个值。与其直接返回值,不如根据模板为模板提供返回类型n:

    template<typename T, size_t n> char (& array_size(const T (&)[n]) )[n]; 您说如果数组具有n元素,则返回类型是对具有size n和element type 的数组的引用char。现在,您可以获得传递时数组的编译时确定的大小:

    size_t size_of_a = sizeof(array_size(a)); 因为char具有n元素的数组的大小为sizeof n,所以也会给定数组中元素的数量。在编译时,您可以执行

    int havingSameSize[sizeof(array_size(a))]; 因为从未真正调用过该函数,所以不

    2020-02-09 13:43:07
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
《0代码搭应用》 立即下载
不止代码 立即下载
Python第五讲——关于爬虫如何做js逆向的思路 立即下载