函数模板详解

大家好:

        衷心希望各位点赞。

        您的问题请留在评论区,我会及时回答。

一、函数模板

C++另一种编程思想为:泛型编程,主要利用的技术就是模板。

C++提供两种模板机制:函数模板、类模板

函数模板语法

        函数模板作用:建立一个通用函数,它的函数返回值类型和形参类型可以不具体指定,用一个虚拟的类型来代表。

语法:

template<typename T>

函数声明或定义

解释:

template:声明创建模板

typename:表示其后面的符号是一种数据类型,可以用class代替

T:通用的数据类型,名称可以替换,通常为大写字母

#include <iostream>
#include <Windows.h>
#include <string>using namespace std;// 交换两个数
template<typename T>
void mySwap(T& a, T& b)
{T temp = a;a = b;b = temp;
}int main(void)
{int a = 10;int b = 20;// 有两种调用方式// 1、自动类型推导mySwap(a, b);cout << "a = " << a << endl;cout << "b = " << b << endl;double c = 1.1;double d = 2.2;// 2、显示指定类型mySwap<double>(c, d);cout << "c = " << c << endl;cout << "d = " << d << endl;system("pause");return 0;
}

 运行截图:

总结

函数模板利用关键字template

使用函数模板有两种方式:自动类型推导、显式指定类型 

模板的目的是为了提高复用性,将类型参数化。

二、函数模板注意事项

注意事项:

1.自动类型推导,必须推导出一致的数据类型T,才可以使用。

2.模板必须要确定出T的数据类型,才可以使用。

#include <iostream>
#include <Windows.h>
#include <string>using namespace std;// 利用模板提供通用的交换函数
template<typename T>
void mySwap(T& a, T& b)
{T temp = a;a = b;b = temp;
}int main(void)
{int a = 10;int b = 20;char c = 'c';// 函数模板注意事项// 自动类型推导,必须推导出一致的数据类型T,才可以使用mySwap(a, c); // 报错:没有与参数列表匹配的函数模板system("pause");return 0;
}

        执行这行代码mySwap(a, c)的时候,因为变量a与变量c的数据类型不一致,导致编译器无法推导出T的数据类型,从而编译时报错。

#include <iostream>
#include <Windows.h>
#include <string>using namespace std;template<typename T>
void func()
{cout << "func 调用" << endl;
}int main(void)
{// 函数模板注意事项// 模板必须要确定出T的数据类型,才可以调用func(); // 报错:无法确定T的数据类型func<int>();// 正确:显式指定T的数据类型system("pause");return 0;
}

         执行这行代码func()的时候,因为无法确定T的数据类型,所以编译器会报错。下一行代码显式指定了T的数据类型为int,所以正确。

        因此,在使用函数模板的时候,需要注意:模板必须确定出T的数据类型,才可以调用函数模板。

三、普通函数与函数模板的区别

1.普通函数调用时可以发生自动类型转换(隐式类型转换)

2.函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换

3.函数模板调用时,如果利用显示指定类型的方式,可以发生隐式类型转换

#include <iostream>
#include <Windows.h>
#include <string>using namespace std;// 普通函数
int myAdd01(int a, int b)
{return a + b;
}// 函数模板
template<typename T>
T myAdd02(T a, T b)
{return a + b;
}int main(void)
{// 普通函数可以发生自动类型转换int num = 10;char a = 'A'; // A:65cout << "10 + A = " << myAdd01(10, a) << endl;// 函数模板,自动类型推导时,不能发生隐式类型转换cout << "10 + A = " << myAdd02(10, a) << endl; // 报错:没有与参数列表匹配的函数模板// 函数模板,显式指定类型时,可以发生隐式类型转换cout << "10 + A = " << myAdd02<int>(10, a) << endl; system("pause");return 0;
}

        执行这行代码cout << "10 + A = " << myAdd02(10, a) << endl;的时候,因为函数模板无法确定T的数据类型,所以编译时报错。

总结

建议调用函数模板时,使用显示指定类型的方式,指定T的数据类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python6:Socket编程初步学习笔记

Socket协议概要 创建socket的时候&#xff0c;需要一些选项来说明本次使用协议具体是什么&#xff0c;常用的两个&#xff1a; 由此产生的不同组合&#xff1a; 但目前TCP(IPV4)是主流&#xff0c;SOCK_STREAMAF_INET 创建和使用Socket socket模块中有socket类&#xff1a…

QMT量化策略实盘(一)下单函数passorder

第一篇量化实盘的分享&#xff0c;从一定绕不开的综合下单函数passorder说起。 用于股票、期货、期权等下单和新股、新债申购、融资融券等交易操作。&#xff08;对比ptrade就不支持期货交易&#xff09; 这个函数功能很全&#xff0c;同时参数也比较多&#xff0c;在初次使用…

方格分割(蓝桥杯)

文章目录 方格分割题目描述答案&#xff1a;509思路dfs 方格分割 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 6x6的方格&#xff0c;沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。 如下就是三…

【vue3学习笔记(一)】vue3简介;使用vue-cli创建工程;使用vite创建工程;分析工程结构;安装开发者工具

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 对应课程136-140节 课程 P136节 《vue3简介》笔记 课程 P137节 《使用vue-cli创建工程》笔记 官方文档&#xff1a; https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create官方文档地址 查看vue-cli版本&#x…

git配置密钥

要配置 Git 密钥&#xff0c;可以按照以下步骤进行操作&#xff1a; 1.生成密钥&#xff1a;首先&#xff0c;在终端或命令提示符中运行以下命令生成密钥对&#xff1a; ssh-keygen -t rsa -b 4096 -C "dengweng-pulse.net"这将生成一个 RSA 密钥对&#xff0c;其中…

课堂行为动作识别数据集

一共8884张图片 xml .txt格式都有 Yolo可直接训练 已跑通 动作类别一共8类。 全部为教室监控真实照片&#xff0c;没有网络爬虫滥竽充数的图片&#xff0c;可直接用来训练。以上图片均一一手工标注&#xff0c;标签格式为VOC格式。适用于YOLO算法、SSD算法等各种目标检测算法…

http模块—http请求练习

题目要求&#xff1a;搭建如下http服务&#xff1a; 1.当浏览器向我们的服务器发送请求时&#xff0c;当请求类型是get请求&#xff0c;请求的url路径地址是/login。响应体结果是登录页面 2.当浏览器向我们的服务器发送请求时&#xff0c;当请求类型是get请求&#xff0c;请求…

【FIneBI可视化工具的使用】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;书生♡&#xff0c;今天主要和大家分享一下可视化的工具FineBI的详细使用,希望对大家有所帮助。感谢大家关注点赞。 &#x1f49e;&#x1f49e;前路漫漫&#xff0c;希望大家坚持下去&#xff0c;不忘初心&…

【解决】CameraPath3 事件回调异常

开发平台&#xff1a;Unity 2021.3.7f1c1 编程平台&#xff1a;Visual Studio 2022 编程语言&#xff1a;CSharp 6.0 三方工具&#xff1a;CameraPath3   工具简述 在 2019年官方停止版本维护&#xff0c;不再支持 URP 等新版本。而实际业务要求继续使用该开发工具。   问题…

Java代码基础算法练习-求一个三位数的各位数字之和-2024.03.27

任务描述&#xff1a; 输入一个正整数n&#xff08;取值范围&#xff1a;100<n<1000&#xff09;&#xff0c;然后输出每位数字之和 任务要求&#xff1a; 代码示例&#xff1a; package M0317_0331;import java.util.Scanner;public class m240327 {public static voi…

瓦楞板一体化污水处理设备怎么选型

瓦楞板一体化污水处理设备的选型是一个重要而复杂的过程。在选择适合的设备前&#xff0c;我们需要考虑以下几个因素&#xff1a;污水性质、处理效果、处理能力、设备性能和成本等。本文将从这几个方面为您介绍瓦楞板一体化污水处理设备的选型方法。 首先&#xff0c;污水性质是…

计算机网络基础——网络安全/ 网络通信介质

chapter3 网络安全与管理 1. 网络安全威胁 网络安全&#xff1a;目的就是要让网络入侵者进不了网络系统&#xff0c;及时强行攻入网络&#xff0c;也拿不走信息&#xff0c;改不了数据&#xff0c;看不懂信息。 事发后能审查追踪到破坏者&#xff0c;让破坏者跑不掉。 网络…

Django 评论楼创建

Django 评论楼创建 【零】最终效果预览 【一】介绍 &#xff08;1&#xff09;情况说明 在Django模型层中有这么个字段 parent models.ForeignKey(toself, on_deletemodels.CASCADE, verbose_name"父评论ID", nullTrue, blankTrue)这个字段是一对多的外键字段 其…

07、JS实现:用回溯法实现数组全排列的算法(一步一步剖析,很详细)

回溯法实现数组全排列的算法 Ⅰ、回溯法实现数组全排列&#xff1a;1、题目描述&#xff1a;2、解题思路&#xff1a;3、实现代码&#xff1a; Ⅱ、小结&#xff1a; Ⅰ、回溯法实现数组全排列&#xff1a; 1、题目描述&#xff1a; 给定⼀个 没有重复 数字的序列&#xff0c;…

flowable-ui后台显式非中文

把flowable-ui的war包发布后&#xff0c;后台界面显示的是非中文 用的是6.7.2版本&#xff0c;经过了解该版本是有国际化配置文件的&#xff0c;支持中文 猜测可能是浏览器语言导致未显示中文&#xff0c;在控制台输入navigator.language&#xff0c;查看到果然是英文 解决方案…

如何制作蛋糕店小程序_开启您的蛋糕店小程序之旅

甜蜜滋味&#xff0c;一触即达——开启您的蛋糕店小程序之旅 在这个快节奏的时代&#xff0c;人们对美食的追求从未停歇。尤其是那些色香味俱佳、口感细腻的蛋糕&#xff0c;更是成为了许多人生活中的小确幸。然而&#xff0c;忙碌的工作和生活常常让我们无法亲自前往蛋糕店&a…

大型网络游戏设计与AI赋能-6

接上文&#xff01;&#xff01;! 所以最后我们会有一个Game design的分析。这个分析主要是在游戏类型&#xff0c;最后这个游戏会发布在什么平台上&#xff0c;游戏的玩法具体是什么样子的&#xff0c;需要提供给玩家哪些比较特殊的玩家体验等等。列出来这4项是一定要去考虑的…

经典机器学习模型(九)EM算法的推导

经典机器学习模型(九)EM算法的推导 1 相关数据基础 1.1 数学期望 1.1.1 数学期望的定义 根据定义&#xff0c;我们可以求得掷骰子对应的期望&#xff1a; E ( X ) X 1 ∗ p ( X 1 ) X 2 ∗ p ( X 2 ) . . . X 6 ∗ p ( X 6 ) 1 ∗ 1 6 2 ∗ 1 6 1 ∗ 1 6 3 ∗ 1 6 …

PostgreSQL11 | Windows系统安装PostgreSQL

本教程选取与参考书籍《PostgreSql11 从入门到精通》&#xff08;清华大学出版社&#xff09;的11大版本最新小版本11.22的安装作为教程案例 下载 下载PostgreSQL installer 下载到本地 安装 运行安装引导器 中国地区语言选项&#xff08;暂时&#xff09; Chinese(Simplifie…

测试开发工程师(QA)职业到底需要干些什么?part7:硬件测试工程师QA

概述 硬件测试工程师QA主要负责确保硬件产品在设计、制造和交付过程中的质量和性能。主要任务是进行测试、验证和分析硬件系统、组件和设备&#xff0c;以确保其符合规格和质量标准。下面是硬件测试工程师QA在其工作中常涉及的一些方面&#xff1a; 测试计划和策略&#xff1a…