讲师中心 微信公众号
AI工具推荐 视频效率加速

C++ 中函数模板的参数传递方式与普通函数有何不同?

风芳酱_9059

风芳酱_9059

发布时间:2024-09-22 19:51:02

|

848人浏览过

|

来源于php中文网

原创

与普通函数相比,函数模板使用实参替代方式传递参数,将实参实际类型传递给模板参数,并将其作为函数内部的参数类型使用,而普通函数的参数传递方式包括按值、按引用和按指针传递。

C++ 中函数模板的参数传递方式与普通函数有何不同?

C++ 中函数模板的参数传递方式与普通函数的对比

背景

函数模板是 C++ 中一种强大的特性,它允许我们创建可用于不同类型泛化的函数。函数模板与普通函数的关键区别之一在于参数传递方式。

立即学习“C++免费学习笔记(深入)”;

普通函数

  • 按值传递:参数值被复制到函数内部。
  • 按引用传递:函数获得对实际值的引用。
  • 按指针传递:函数获得指向实际值的指针。

函数模板

C++ 算法竞赛自动化测试数据生成与校验框架
C++ 算法竞赛自动化测试数据生成与校验框架

根据原题生成新题面、验证器及完整测试数据,自动套用 testlib 模板,用于用户要求生成测试数据时。

下载
  • 模板参数推断:模板参数从函数调用的参数类型自动推断而来。
  • 实参替代:实参实际取代模板参数,成为函数内部的参数类型。

代码示例

普通函数:

void printValue(int x) { // 按值传递
  std::cout << "x = " << x << std::endl;
}

void printReference(int& x) { // 按引用传递
  x++; // 修改实际值
  std::cout << "x = " << x << std::endl;
}

void printPointer(int* x) { // 按指针传递
  *x = 10; // 修改实际值
  std::cout << "*x = " << *x << std::endl;
}

int main() {
  int a = 5;
  printValue(a); // 5
  printReference(a); // 6
  printPointer(&a); // 10
}

函数模板:

template<typename T>
void print(T value) { // 模板参数推断
  std::cout << "value = " << value << std::endl;
}

int main() {
  int a = 5;
  double b = 3.14;
  print(a); // 模板参数为 int
  print(b); // 模板参数为 double
}

关键区别

  • 参数类型:普通函数的参数类型在定义时固定,而函数模板的参数类型在调用时通过模板参数推断获得。
  • 参数传递:普通函数的参数按值、按引用或按指针传递,而函数模板的参数通过实参替代传递。

实战案例

函数模板可以用于创建泛型算法和容器,提高代码可重用性和可读性。例如,我们可以定义一个打印任何类型值的函数模板:

template<typename T>
void print(T value) {
  std::cout << "value = " << value << std::endl;
}

int main() {
  // 打印不同类型的变量
  int a = 5;
  double b = 3.14;
  std::string s = "Hello";
  print(a);
  print(b);
  print(s);
}

通过使用函数模板,我们可以处理不同类型的参数而无需编写多个类似的函数。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

相关专题

更多
C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

299

2026.04.23

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

311

2026.03.13

java值传递和引用传递有什么区别
java值传递和引用传递有什么区别

java值传递和引用传递的区别:1、基本数据类型的传递;2、对象的传递;3、修改引用指向的情况。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

166

2024.02.23

java值传递和引用传递有什么区别
java值传递和引用传递有什么区别

java值传递和引用传递的区别:1、基本数据类型的传递;2、对象的传递;3、修改引用指向的情况。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

166

2024.02.23

go语言引用传递
go语言引用传递

本专题整合了go语言引用传递机制,想了解更多相关内容,请阅读专题下面的文章。

3357

2025.06.26

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

4776

2023.08.14

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

40

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

20

2026.09.23

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

20

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP基础入门课程
PHP基础入门课程

共33课时 | 3.3万人学习

React中文开发手册
React中文开发手册

共0课时 | 1人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn