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);
相关推荐
载数而行5201 小时前
QT的五类布局
c++·qt·学习
Cg136269159741 小时前
JS-对象-Dom案例
开发语言·前端·javascript
故事和你911 小时前
sdut-程序设计基础Ⅰ-实验五一维数组(8-13)
开发语言·数据结构·c++·算法·蓝桥杯·图论·类和对象
载数而行5201 小时前
QT的QString类
c++·qt·学习
Jin、yz2 小时前
JAVA 八股
java·开发语言
我是唐青枫2 小时前
C#.NET Span 深入解析:零拷贝内存切片与高性能实战
开发语言·c#·.net
lxh01132 小时前
数据流的中位数
开发语言·前端·javascript
bu_shuo2 小时前
Visual C++2010学习版(全国计算机等级二级考试版)安装记录
c++·cpp·visual c++·计算机二级
盒马盒马2 小时前
Rust:迭代器
开发语言·后端·rust
Full Stack Developme3 小时前
Java 常用通信协议及对应的框架
java·开发语言