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

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

Barbara Streisand
Barbara Streisand原创
2024-12-24 04:28:13226浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn