本节 主要讲解 模版类型 推断 的知识。
第一个就要学习 怎么查看 编译器对于某个模版类型 推断后的结果。
后面我们推断了,就能和编译器的推断进行比较,就知道自己错没错。
目的:通过“”查看编译器类型推断的结果“”这个手段让大家学习并掌握C++类型推断的规则。
掌握C++类型推断规则,而不是依赖什么手段去查看 编译器 给我们推断出来的结果。
一 如何查看类型推断结果
当前要学习的是 使用第三方 boost 库 来完成我们的任务。
0.boost 介绍
如何利用boost库把编译器给类型推断出来的
boost 是一个存在很久的C++ 库
1.那么第一步就是要先下载 boost 库了
注意下载时,不要使用迅雷,右键 “链接另存为”,容易下载。
下载后解压,我们当前是解压在 D:\Ctool\boost_1_84_0
2.第二步:在VS中配置


3.第三步:在代码中引入 boost 库的头文件,并写示例代码
#include <boost/type_index.hpp>
template<class T>
void myfunc26(T tmprv) {//普通的值传递
//void myfunc26(const T teprv) { // const 普通的值传递
// void myfunc26(T * teprv) { // 普通的指针类型
// void myfunc26(const T* teprv) {// const 普通的指针类型
// void myfunc26(T& teprv) {//普通的引用类型
// void myfunc26(const T& teprv) {//const普通的引用类型
// void myfunc26(T&& teprv) { //万能引用
// void myfunc26(const T&& teprv) { //万能引用前加上const会变成右值引用
using boost::typeindex::type_id_with_cvr;
cout << "T 类型 = " << type_id_with_cvr<T>().pretty_name() << endl; //显示T类型
cout << "tmprv 类型 = " << type_id_with_cvr<decltype(tmprv)>().pretty_name() << endl; //显示T类型
}
void main() {
int a = 19;
myfunc26(a);
}
二 理解模板类型推断
结论如下:自行测试,这个有这个类型推断有啥用呢?
1.推断中,引用类型实参的引用类型等于不存在
2.万能引用,实参为左值或者右值,推断的结果不同
万能引用,传递的实际参数只能是左值或者右值。
3.按值传递,如果实参不是引用或者指针,那么会copy 一份 到形参,const属性会失效。但是实参如果是引用或者指针,则另当别论。
4.数组或者函数类型再类型推断中被看做是指针,除非函数模版的形参是引用。
1729

被折叠的 条评论
为什么被折叠?



