函数模板的注意事项

1.可以为类的成员函数创建模板,但不可以是虚函数和析构函数。

#include <iostream>
using namespace std;

class CGirl {
	public:
		template <typename T>
		CGirl(T a) {//构造函数中
			cout << "a=" << a << endl;
		}
		template <typename T>
		void show(T b) {//普通成员函数
			cout << b << endl;
		}
};

int main() {
	CGirl g(5);
	g.show(90);
	return 0;
}

以上很合理,可以对构造函数,和普通成员函数创建模板,但是虚函数不可以:如下 

构造函数和普通的成员函数都可以用函数模板,但是你这个虚函数就不行了。

2.使用函数模板的时候必须明确数据类型,确保实参与函数模板能匹配上。

你让他没法推导也不行,这样的话你就制定一个数据类型int得了

——————————————————————————————————————————

3.使用函数模板时,推导的数据类型必须适应函数模板中的代码。

#include <iostream>
using namespace std;

template <typename T>
T add(T a, T b) {
	return a + b;
}
class CGirl
{


};
int main() {
	int a = 10;
	int b = 20;
	int c = add(a, b); cout << "c = "<<c << endl;
	string d = "zhuge";
	string e= "ouge";
	string f = add(d, e); cout << "f = " << f << endl;
	//CGirl x, y;
	//CGirl z = add(x, y);
	return 0;
}
c = 30
f = zhugeouge

C:\Users\代伟业\Desktop\C++\初始化列表\this指针\x64\Debug\this指针.exe (进程 19920)已退出,代码为 0。
按任意键关闭此窗口. . .

int string 都适用这个函数模板的代码;

但是CGirl不适用于加法;

#include <iostream>
using namespace std;

template <typename T>
T add(T a, T b) {
	return a + b;
}
class CGirl
{


};
int main() {
	CGirl x, y;
	CGirl z = add(x, y);
	return 0;
}

4.使用函数模板时,如果是自动类型推导,不会发生隐式类型转换,如果显示指定了函数模板的数据类型,可以发生隐式类型转换;

#include <iostream>
using namespace std;

template <typename T>
T add(T a, T b) {
	return a + b;
}
class CGirl
{


};
int main() {
	int a = 10;
	int b = 20;
	int c = add(a, b);
	cout << "c = " << c << endl;
	return 0;
}

还是刚才的代码,你这么整没毛病,他是与函数模板的定义匹配的;如果把变量b改为char,则报错,due to 模板参数不明确;

看来编译器也是没有对b进行隐式类型转换,如果显式指定函数模板的数据类型为 int:

就可以了;

也就是说:如果显式指定了函数模板的数据类型,编译器就可以对实参进行隐式类型转换。

5.函数模板支持多个通用数据类型的参数;(实际开发不常用,但是必须掌握)

#include <iostream>
using namespace std;

template <typename T1,typename T2>
void show(T1 no, T2 message) {
	cout << "亲爱的" << no << "号:" << message << endl;
}
int main() {
	
	short bh = 3;//超女编号
	const char* message = "我是一只傻傻鸟。";//表白内容
	show(bh,message);
	return 0;
}

 

亲爱的3号:我是一只傻傻鸟。

C:\Users\代伟业\Desktop\C++\初始化列表\this指针\x64\Debug\this指针.exe (进程 4236)已退出,代码为 0。
按任意键关闭此窗口. . .

他是自动推导的: 

6.函数模板支持重载,可以有非通用数据类型的参数;

#include <iostream>
using namespace std;
template <typename T>
void func(T a) {
	cout << "func(T a)\n";
}


template <typename T1,typename T2>
void func(T1 a, T2 b) {
	cout << "func(T1 a,T2 b)\n";
}
template <typename T1,typename T2>
void func(T1 a, T2 b, int c) {
	cout << "func(T1 a,T2 b,int c)\n";
}

int main() {
	func(1);
	func(1, 2);
	func(1, 2, 3);
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysqld数据库管理

一.Mysqld数据库类型 常用的数据类型 int 整型 无符号[0-4294967296&#xff08;2的32次方&#xff09;-1]&#xff0c;有符号[-2147483648&#xff08;2的31次方&#xff09;-2147483647]float单精度浮点 4字节32位double双精度浮点 8字节64位char固定长度的字符类型…

如何利用TikTok矩阵源码实现自动定时发布和高效多账号管理

在如今社交媒体的盛行下&#xff0c;TikTok已成为全球范围内最受欢迎的短视频平台之一。对于那些希望提高效率的内容创作者而言&#xff0c;手动发布和管理多个TikTok账号可能会是一项繁琐且耗时的任务。幸运的是&#xff0c;通过利用TikTok矩阵源码&#xff0c;我们可以实现自…

【vue3|第9期】Vue3中watch监视的深度解读

日期&#xff1a;2024年6月10日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

element-plus的Tour 漫游式引导怎么去绑定Cascader 级联选择器

首先官方例子是用的button 官方.$el这个log出来是&#xff1a; 知道是以元素为准就拿对应的元素就行 级联选择器.$el是这样的&#xff1a; 你可以移入这个元素部分去看看是哪个要用的&#xff08;好像火狐直接放上去就可以看到元素表示&#xff0c;谷歌要双击或者右键选择去看…

英语恶补ing

ing的词组都有停下来做某事的感觉了。 second hand是形容词了。 wouldnt buy这里的would是情态动词&#xff0c;也是助动词 助动词不能单独使用&#xff0c;要搭配实义动词&#xff0c;这样才能构成谓语 情态动词&#xff08;modals&#xff09;在英语中有多种作用&#xff…

Fedora40的#!bash #!/bin/bash #!/bin/env bash #!/usr/bin/bash #!/usr/bin/env bash

bash脚本开头可写成 #!/bin/bash , #!/bin/env bash , #!/usr/bin/bash , #!/usr/bin/env bash #!/bin/bash , #!/usr/bin/bash#!/bin/env bash , #!/usr/bin/env bash Fedora40Workstation版的 /bin 是 /usr/bin 的软链接, /sbin 是 /usr/sbin 的软链接, rootfedora:~# ll …

java8实战1(让方法参数具备行为能力)

客户需求是查出颜色为green的苹果 客户需求变成查出颜色为red的苹果 假设现在客户需求又变了,找出黄色的呢?你想查什么颜色直接做为参数输入 让调用者输入颜色参数 问题是现在客户想把重量做为条件,来筛选苹果集合 这就为难了,客户需求随时会变 观察以上例子,发现有个共同…

Android Studio无法连接夜神模拟器的解决方案

一、AS检测不到夜神模拟器 1、问题描述 在按照教程【如何安装和使用Android夜神模拟器】进入夜神的bin目录&#xff0c;输入连接命令回车后&#xff0c;终端显示的already connected to 127.0.0.1:62001&#xff0c;但是AS的Running Devices并没有显示夜神模拟器。 2、解决方…

新能源汽车的能源动脉:中国星坤汽车电缆在新能源汽车电气化中的应用!

随着新能源汽车行业的蓬勃发展&#xff0c;汽车电缆组件作为汽车电气系统的核心组成部分&#xff0c;其重要性日益凸显。中国星坤汽车电缆组件以其卓越的性能和创新技术&#xff0c;为汽车的电能传输、信号传递和控制提供了坚实的保障。本文将深入解析星坤汽车电缆组件的特性、…

Objective-C 学习笔记 | KVO(key-value obsereving)

Objective-C 学习笔记 | KVO&#xff08;key-value obsereving&#xff09; Objective-C 学习笔记 | KVO&#xff08;key-value obsereving&#xff09;使用 KVOKVO 的工作原理 Objective-C 学习笔记 | KVO&#xff08;key-value obsereving&#xff09; KVO 是指当指定的对象…

GPT-4系列模型,在文档理解中的多维度评测

著名云数据平台Snowflake的研究人员发布了一篇论文&#xff0c;主要对OpenAI的GPT-4系列模型进行了研究&#xff0c;查看其文本生成、图像理解、文档摘要等能力。 在DocVQA、InfographicsVQA、SlideVQA和DUDE数据集上对GPT-4、GPT-4 V、GPT-4 Turbo V OCR等进行了多维度测试。…

【交易策略】#22-24 残差资金流强度因子

【交易策略】#22-24 残差资金流强度因子

太速科技-FMC213V3-基于FMC兼容1.8V IO的Full Camera Link 输入子卡

FMC213V3-基于FMC兼容1.8V IO的Full Camera Link 输入子卡 一、板卡概述 该板卡为了考虑兼容1.8V电平IO&#xff0c;适配Virtex7&#xff0c;Kintex Ultrascale&#xff0c;Virtex ultrasacle FPGA而特制&#xff0c;如果要兼容原来的3.3V 也可以修改硬件参数。板卡支持1路…

我的python-web基础(Flask前后端不分类)

1.HTML HTML是超文本标记语言 &#xff08; 英文 &#xff1a; HyperText Markup Language &#xff0c; HTML &#xff09;&#xff0c;它不是编程语言&#xff0c;而是一种标记语言 HTML标记标签通常被称为HTML标签&#xff0c;它的特点如下&#xff1a; HTML标签是由尖括…

【电脑小白】装机从认识电脑部件开始

前言 在 B 站上刷到了一个很牛逼的电脑装机视频&#xff0c;很适合电脑小白学习&#xff0c;故用文本记录下。 推荐对组装台式电脑有兴趣的小伙伴都去看看这个视频&#xff1a; 原视频链接&#xff1a;【装机教程】全网最好的装机教程&#xff0c;没有之一_哔哩哔哩_bilibil…

font-spider按需生成字体文件

font-spider可以全局安装,也可以单个项目内安装,使用npm run xxxx的形式 npm i font-spider "dev": "font-spider ./*.html" <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&…

RAG与Langchain简介

RAG与Langchain简介 什么是RAGRAG解决的问题RAG工作流程RAG调优策略LangChain简介 什么是RAG 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff09;&#xff0c;主要是通过从外部给大模型补充一些知识&#xff0c;相当于给模型外挂了一个知识库&#xff0c;让…

软件测试-第2章-软件测试策略

目录 1.1软件测试的生命周期 1&#xff0e;计划阶段 2&#xff0e;设计阶段 3&#xff0e;开发阶段 4&#xff0e;执行阶段 5&#xff0e;评估阶段 1.2测试步骤 ​编辑2.2.1 单元测试 2.2.2 集成测试 2.2.3 确认测试 2.2.4 系统测试 1.3静态方法与动态方法 1.4…

RERCS系统开发实战案例-Part05 FPM Application的Feeder Class搜索组件的实施

1、通过事务码 SE24对Feeder Class实施 1&#xff09;接口页签的简单说明&#xff1a; ① IF_FPM_GUIBB&#xff1a;通用UI构建块&#xff0c;整个UIBB模块的基础接口&#xff1b; ② IF_FPM_GUIBB_SEARCH&#xff1a;通用搜索UI构建块&#xff0c;搜索组件UIBB的基础接口&…

PCL 拟合二维椭圆(迭代法)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 一般情况,我们会用椭圆拟合二维点,用椭球拟合三维点。在n维中,这些对象被称为超椭球体,由二次方程隐式定义 超椭球的中心是n1向量C,nn矩阵S是正定的,n1向量X是超椭球上的任意点。矩阵S可以用特征分解,S = R…