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);
相关推荐
Ruiery12 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
第九序言T12 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
欧米欧12 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery12 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
Sakura_j_h_13 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
qetfw13 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
龙亘川13 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人13 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
Raas10014 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
专注仿真15 小时前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法