当前位置: 首页 > news >正文

C++模板基础(二)

函数模板(二)
● 模板实参的类型推导
– 如果函数模板在实例化时没有显式指定模板实参,那么系统会尝试进行推导

template<typename T>
void fun(T input, T input2)
{std::cout << input << '\t' << input2 << std::endl;
}
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);fun<int>(3, 5.0); //OK, 5.0 static_cast to intfun(3, 5.0); //Error: 3 deducted to int but 5.0 deducted to doublereturn a.exec();
}

– 推导是基于函数实参(表达式)确定模板实参的过程,其基本原则与 auto 类型推导相似
● 函数形参是左值引用 / 指针:
– 忽略表达式类型中的引用
– 将表达式类型与函数形参模式匹配以确定模板实参
● 函数形参是万能引用
– 如果实参表达式是右值,那么模板形参被推导为去掉引用的基本类型
– 如果实参表达式是左值,那么模板形参被推导为左值引用,触发引用折叠
● 函数形参不包含引用
– 忽略表达式类型中的引用
– 忽略顶层 const

template<typename T>
void fun(T input)
{std::cout << input << std::endl;
}
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);int x =3;int& ref = x;fun(ref); //T被推导为intconst int& ref2 = x;fun(ref2); //T被推导为intreturn a.exec();
}
template<typename T>
void fun(T input)
{std::cout << input << std::endl;
}
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);int x =3;const int* const ptr = &x;fun(ptr);//T被推导为const int*,忽略顶层const,ptr会不会被修改不会影响到input会不会被修改return a.exec();
}

– 数组、函数转换成相应的指针类型

系统的转换是有限的,不会考虑static_cast等等的转换。

参考
深蓝学院:C++基础与深度解析

http://www.lryc.cn/news/44054.html

相关文章:

  • 什么是linux内核态、用户态?
  • day8—选择题
  • ngx错误日志error_log配置
  • 1.11、自动化
  • 函数的定义与使用及七段数码管绘制
  • 怎么压缩pdf文件大小?pdf文件太大如何压缩?
  • 阿里云Linux服务器登录名ecs-user和root选择问题
  • 【云原生】 初体验阿里云Serverless应用引擎SAE(三),挂载配置文件使应用的配置和运行的镜像解耦
  • Oracle用户密码过期,修改永不过期
  • welearn 视听说1-4
  • 【git】将本地项目同步到远程
  • 10-链表练习-LeetCode82删除排序链表中的重复元素II
  • 贯穿设计模式第五话--接口隔离原则
  • C语言计算机二级/C语言期末考试 刷题(四)
  • JDK8中Stream接口的常用方法
  • ThingsBoard源码解析-数据订阅与规则链数据处理
  • 探究Transformer模型中不同的池化技术
  • Android 9.0 设置讯飞语音引擎为默认tts语音播报引擎
  • 直流无刷电机驱动的PWM频率
  • 机房动环监控4大价值,轻松解决学校解决问题
  • 用于平抑可再生能源功率波动的储能电站建模及评价(Matlab代码实现)
  • Burpsuite详细教程
  • 目标检测:FP(误检)和FN(漏检)统计
  • 【MySQL专题】04、性能优化之读写分离(MyCat)
  • 信息系统项目管理师第四版知识摘编:第5章 信息系统工程
  • 【2023春招】西山居游戏研发岗笔试AK
  • 什么是分布式,分布式和集群的区别又是什么?
  • Cellchat和Cellphonedb细胞互作一些问题的解决(error和可视化)
  • 大文件分片上传的实现【前后台完整版】
  • Java序列化面试总结