c++ 11 学习 函数模板

函数模板的基本定义形式如下:

cpp 复制代码
template <template-parameter-list>
return-type function-name (parameter-list) {
    // 函数体
}
template <template-parameter-list>:模板参数列表,可以包含类型参数和非类型参数。
return-type:返回值类型。
function-name:函数名。
parameter-list:函数参数列表。

模板参数为:非类型参数 例子

cpp 复制代码
// Convert string to char array
template <size_t N> inline void StringToCharArray(const string& src, char (&dest)[N]) {
    if (src.empty()) {
        dest[0] = '\0';
        return;
    }

    strncpy(dest, src.c_str(), N - 1);
    dest[N - 1] = '\0';
}

在C++的 StringToCharArray 函数模板中,size_t N不需要显式传入‌。

这是因为模板参数 N 可以通过‌模板参数推导‌(Template Argument Deduction)由编译器自动推断出来。

具体来说,char (&dest)[N] 是一个引用类型的形参,它表示一个大小为 N 的字符数组的引用。当调用该函数时,编译器会根据传入的数组大小自动推导出 N 的值。

在C++中 size_t N 可以作为模板参数,而且这是一种非常常见的用法。这种参数被称为‌非类型模板参数‌(Non-Type Template Parameter)。

非类型模板参数允许你在模板中使用常量值,而不是类型。size_t 是一个无符号整数类型,常用于表示对象的大小或数量,因此它非常适合用作非类型模板参数。

cpp 复制代码
std::string src = "Hello";
char dest[10];
StringToCharArray(src, dest);
相关推荐
鹏大师运维38 分钟前
为什么信创电脑装软件总提示“软件包架构不匹配”?
linux·运维·架构·国产化·麒麟·deb·统信uos
fqbqrr40 分钟前
2606C++,C++构的多态
开发语言·c++
biter down1 小时前
从 0 到 1 搭建 Python 接口自动化测试框架(博客系统实战)
开发语言·python
小欣加油1 小时前
leetcode56 合并区间
c++·算法·leetcode·职场和发展
Yolo_TvT2 小时前
C++:析构函数
c++
鹤落晴春2 小时前
【Linux复习】管理SELinux安全性
linux·运维·服务器
yz_aiks3 小时前
Linux Jar包配置Systemd自启动实战:从排查到配置全流程
linux·python·jar·自启动·systemd
threelab3 小时前
Three.js 物理模拟着色器 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
武器大师723 小时前
lv_binding_js 代码解读
开发语言·javascript·ecmascript