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);
相关推荐
2601_96207023几秒前
差异基因富集分析(R语言——GO&KEGG&GSEA)
开发语言·golang·r语言
布莱克6053 分钟前
栈(Stack)详解:定义、作用、应用场景及与队列的区别(附 C/C++ 代码)
c语言·开发语言·c++·
打团从来人不齐3 分钟前
Linux服务器搭建笔记-008:台式机共享WIFI
linux·服务器·笔记
zmzb01033 分钟前
C++课后习题训练记录Day203
开发语言·c++
zzzll111124 分钟前
LangChain4j:Java 生态的 AI 应用开发利器
java·开发语言·人工智能
w2005122436 分钟前
K8S控制器管理
linux·云原生·容器·kubernetes
Dream Cosmos40 分钟前
Linux 多线程——线程互斥:从抢票问题到 Mutex 底层原理
linux·c++
JAI科研42 分钟前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm
玖石书1 小时前
Ubuntu 更换 USTC 镜像源完整指南(AMD64 / AARCH64)
linux·运维·ubuntu
zbyyd1 小时前
Linux 进程间通信(IPC):信号、消息队列、共享内存与信号量详解
linux·运维·c语言