117 C++ 理解模板类型推断,通过 第三方库 boost 查看类型推断结果

本节 主要讲解 模版类型  推断 的知识。

第一个就要学习 怎么查看 编译器对于某个模版类型 推断后的结果。

后面我们推断了,就能和编译器的推断进行比较,就知道自己错没错。

目的:通过“”查看编译器类型推断的结果“”这个手段让大家学习并掌握C++类型推断的规则。

掌握C++类型推断规则,而不是依赖什么手段去查看 编译器 给我们推断出来的结果。

一 如何查看类型推断结果

当前要学习的是 使用第三方 boost 库 来完成我们的任务

0.boost 介绍

如何利用boost库把编译器给类型推断出来的

boost 是一个存在很久的C++ 库

1.那么第一步就是要先下载 boost 库了

Boost C++ Libraries

注意下载时,不要使用迅雷,右键 “链接另存为”,容易下载。

下载后解压,我们当前是解压在 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.数组或者函数类型再类型推断中被看做是指针,除非函数模版的形参是引用。

2.1 指针或者引用类型

2.2 万能引用

2.3传值方式

2.4 数组名做实参

2.5 函数名做实参

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值