新闻详情

新闻详情

首页 / 资讯中心 / 详情

我的C++模板的学习总结

发布时间:2026/9/25 18:11:43来源:尧图网络
我的C++模板的学习总结
模板总结文章目录模板总结1.形式注意点函数模板类模板2.实例化与使用注意点函数模板1.隐式实例化直接使用2.显示实例化类模板3.非类型模板参数常量作为模板参数注意点形式4.特化注意点分类1.全特化2.偏特化5.不支持分离编译6.题目1231.形式注意点class和typename可以混用函数模板类模板最开始加上了templateclass T1, class T2, ..., class Tn类内声明类外定义的函数开头也要加上templateclass T1, class T2, ..., class Tn并且要加上类域StackT::2.实例化与使用注意点函数模板可以和普通函数同名如果能直接用普通函数就不会使用函数模板来实例化除非强制显示实例化普通函数不合适的时候再用函数模板函数模板不允许自动类型转换如果函数模板里面只有一个class T那这时候传的两个参数必须是同一个类型的如果是不同的话函数模板应该是class T1,class T2但普通函数可以实例化后的结果才是真正的函数或者类函数模板1.隐式实例化直接使用inta110,a220;doubled110.0,d220.0;Add(a1,a2);Add(d1,d2);2.显示实例化Addint(a,b);类模板Stackintst1;3.非类型模板参数常量作为模板参数注意点只有整形可以可以只有数不赋值size_t N而N的值没定可以只有一个非类型模板参数没有其他的模板参数templatesize_t N变量不可以即使是整型变量(int x299) 都不可以因为它必须在编译期就确认一个数字形式namespacelcj{templateclassT,size_t N10classarray{T _array[N];};}intmain(){lcj::arrayint,5a;// 把 N 指定为 5这个对象占 5 个 intlcj::arrayint,100b;// 把 N 指定为 100这个对象占 100 个 intlcj::arraydoublec;// 不写就用默认的 10相当于 double _array[10];}4.特化注意点必须有一个基础的模板函数函数名后加上尖括号尖括号中是特化的类型函数形参表必须要和模板函数的基础类型完全相同分类1.全特化templateboolLessDate*(Date*left,Date*right){return*left*right;}templateclassDataint,char{public:Data(){coutDataint, charendl;}private:int_d1;char_d2;};2.偏特化// 将第二个参数特化为inttemplateclassT1classDataT1,int{public:Data(){coutDataT1, intendl;}private:T1 _d1;int_d2;};//两个参数偏特化为指针类型templatetypenameT1,typenameT2classDataT1*,T2*{public:Data(){coutDataT1*, T2*endl;}private:T1 _d1;T2 _d2;};//两个参数偏特化为引用类型templatetypenameT1,typenameT2classDataT1,T2{public:Data(constT1d1,constT2d2):_d1(d1),_d2(d2){coutDataT1, T2endl;}private:constT1_d1;constT2_d2;};5.不支持分离编译模板不支持分离编译所以不能在.h声明在.cpp实现一般只能放在一个文件里6.题目1下列的模板声明中其中几个是正确的 1)template2)templateT1,T23)templateclass T1,T24)templateclass T1,class T25)templatetypename T1,T26)templatetypename T1,typename T27)templateclass T1,typename T28)typename T1,class T29)templatetypename T1, typename T2, size_t N10)templatetypename T, size_t N100, class _Aalloc11)templatesize_t N正确的定义为4 6 7 9 10 11一共6个故答案为D2以下程序运行结果正确的是( )templateType Max(const Type a, const Type b){​ cout“This is Max”endl;​ return a b ? a : b;}templateint Max(const int a, const int b){​ cout“This is Max”endl;​ return a b ? a : b;}templatechar Max(const char a, const char b){​ cout“This is Max”endl;​ return a b ? a : b;}int Max(const int a, const int b){​ cout“This is Max”endl;​ return a b ? a : b;}int main(){​ Max(10,20);​ Max(12.34,23.45);​ Max(‘A’,‘B’);​ Max(20,30);​ return 0;}A.This is Max This is Max This is Max This is MaxB.This is Max This is Max This is Max This is MaxC.This is Max This is Max This is Max This is MaxD.This is Max This is Max This is Max This is Max答案为: A3以下程序运行结果正确的是( )templateclass T1, class T2class Data{public:Data() { cout “DataT1, T2” endl; }private:T1 _d1;T2 _d2;};templateclass DataT1, int{public:Data() { cout “DataT1, int” endl; }private:T1 _d1;int _d2;};template typename T1, typename T2class Data T1**,T2**{public:Data() { cout “DataT1**, T2**” endl; }private:T1 _d1;T2 _d2;};template typename T1, typename T2class Data T1, T2{public:Data(const T1 d1, const T2 d2)_d1(d1), _d2(d2){cout “DataT1, T2” endl;}private:const T1 _d1;const T2 _d2;};int main(){Datadouble, int d1;Dataint, double d2;Dataint, int d3;Dataint, int d4(1, 2);return 0;}A.DataT1, T2 DataT1, int DataT1*, T2* DataT1, T2B.DataT1, int DataT1, T2 DataT1, T2 DataT1*, T2*C.DataT1, int DataT1, T2 DataT1*, T2* DataT1, T2D.DataT1, T2 DataT1, T2 DataT1*, T2* DataT1, T2答案为: C
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

从粒子探测器到云数据库:三个“Atlas”背后的核心技术全景 2026/9/25 18:46:53

从粒子探测器到云数据库:三个“Atlas”背后的核心技术全景

如果你最近经常刷到“atlas”这个词,你的第一反应可能和我一样:到底是哪家的产品?是那个会后空翻的机器人,还是某个大型云数据库,或者是粒子物理实验里的巨型探测器?答案是:都有可能。这也是“a…

阅读更多 →
Docker 常见仓库与镜像使用指南(2026 实战版) 2026/9/25 18:46:46

Docker 常见仓库与镜像使用指南(2026 实战版)

前阵子带一个新人,让他用 Docker 起个 MySQL,他从某篇博客抄了条命令:docker run --name some-mysql --link some-app:app -d mysql跑不通,来问我。我一看就知道这教程是七八年前的——--link 这个参数 Docker 官方早就标记废弃了…

阅读更多 →
如何写好 Skills:用 TaoToken 统一 Key 打通 Agent 与 CC 的配置骨架 2026/9/25 18:46:46

如何写好 Skills:用 TaoToken 统一 Key 打通 Agent 与 CC 的配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
S-101 的图示表达:Look-up 表怎么工作 2026/9/25 18:46:08

S-101 的图示表达:Look-up 表怎么工作

本文首发于个人博客航图笔记 nightchart.cn(S-57 / S-52 / S-100 / 渲染引擎源码走读,持续更新)。CSDN 同步发布,转载请保留出处。 S-57 时代我们把显示规则叫做 Look-up 表:要素类型加属性条件,查出一支笔…

阅读更多 →
select多路复用:非阻塞、超时与随机调度 2026/9/25 18:46:08

select多路复用:非阻塞、超时与随机调度

select多路复用:非阻塞、超时与随机调度select是Go并发模型的精华——一个语句监听多个channel,实现多路复用、非阻塞检查、超时控制和随机公平调度。本文从select的编译机制(selectgo)出发,讲透select的底层原理与生产…

阅读更多 →
Hugging Face模型发布全指南:从本地训练到全球复用 2026/9/25 18:45:55

Hugging Face模型发布全指南:从本地训练到全球复用

1. 这不是“上传”而是“发布一套可复现的模型资产” 你手头有个在本地跑通的 PyTorch 模型,可能是微调后的 BERT 分类器、自己搭的 ViT 图像分类器,或是用 LLaMA-Factory 训练出的小语言模型。现在你想让它被别人发现、下载、复用——不是发个 GitHub …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉