首页 > 后端开发 > C++ > 模板函数如何在编译时确定 C 数组的大小?

模板函数如何在编译时确定 C 数组的大小?

Barbara Streisand
发布: 2024-12-24 04:28:13
原创
222 人浏览过

How Can a Template Function Determine the Size of a C   Array at Compile Time?

用于确定数组大小的模板函数

考虑下面的模板函数:

template<typename T, size_t n>
size_t array_size(const T (&)[n])
{
    return n;
}
登录后复制

此模板的用途是确定作为参数传递的数组的大小。通过引用传递数组会保留其大小,而不是简单地获取指针。

说明

要理解这一点,请考虑以下内容:

  • 在没有引用的情况下将数组传递给函数会导致指针衰减,从而丢失数组的大小信息。
  • 但是,对数组的引用会维护数组的大小和类型。

在我们的模板函数中,数组通过引用传递,确保捕获其大小。模板自动推导尺寸 (n) 和元素类型 (T)。这允许我们将其用作:

size_t array_size(const int (&)[3]) {
    return 3;
}
登录后复制

,可以按如下方式使用:

size_t size_of_a = array_size(a);
登录后复制

高级用法

有一个该技术的变体允许编译时大小确定:

template<typename T, size_t n>
char (& array_size(const T (&)[n]) )[n];
登录后复制

此模板返回对大小为 n 的 char 类型数组的引用。因此,以下代码将在编译时给出传递的数组的大小:

size_t size_of_a = sizeof(array_size(a));
登录后复制

此构造启用编译时确定的数组大小,支持以下操作:

int havingSameSize[sizeof(array_size(a))];
登录后复制

以上是模板函数如何在编译时确定 C 数组的大小?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板