首页 > 后端开发 > C++ > C 模板参数推导如何确定函数模板中的数组大小?

C 模板参数推导如何确定函数模板中的数组大小?

Mary-Kate Olsen
发布: 2024-11-30 15:22:12
原创
644 人浏览过

How Does C   Template Argument Deduction Determine Array Sizes in Function Templates?

了解函数模板中的模板参数推导

考虑以下代码,其中函数模板 cal_size 用于计算和打印数组的大小:

#include <iostream>

template <typename T, size_t N>
void cal_size(T (&amp;a)[N])
{
    std::cout << "size of array is: " << N << std::endl;
}
登录后复制

当程序执行时,它会打印正确的大小两个数组:

int a[] = {1,2,3,4,5,6};
int b[] = {1};

cal_size(a);
cal_size(b);
登录后复制

那么,模板函数 cal_size 如何自动推导出传递数组的大小,即使大小没有作为参数显式传递?

答案在于C 中模板参数推导的概念。它的工作原理如下:

在编译期间,编译器会根据传递给模板函数的参数的实际类型执行模板参数推导,以确定 T 的类型和 N 的值。在这种情况下,当使用参数 a 调用 cal_size 时,编译器将 T 推断为 int,将 N 推断为 6,从而在编译时创建一个专门的函数 cal_size_int_6:

void cal_size_int_6(int (&amp;a)[6])
{
    std::cout << "size of array is: " << 6 << std::endl;
}
登录后复制

同样,对于参数 b,编译器将 T 推导为 int,将 N 推导为 1,从而产生特化cal_size_int_1:

void cal_size_int_1(int (&amp;a)[1])
{
    std::cout << "size of array is: " << 1 << std::endl;
}
登录后复制

因此,原始 cal_size 模板有效地创建了两个单独的函数专业化,每个函数都有自己的硬编码 T 和 N 值。此过程可确保每次调用 cal_size 时打印正确的数组大小。

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

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