C++学习-5

C++模板与类型转换详解
本文详细介绍了C++中不同类型转换(如static_cast, reinterpret_cast等)的应用场景及注意事项,探讨了模板的使用技巧,包括模板参数的匹配规则、模板的默认值设定等,并解释了如何利用模板进行高效的内存管理和对象创建。

1.static_cast静态转换<>要转换的类型,不适用于指针转换

reinterpret_cast<char*>()指针类型的转换

涉及到const,必须用const_cast

打印地址的时候用reinterprt_cast<void*>

2.dynamic_cast<>()动态绑定(多态)子类转到父类

子类对象.父类::方法();

delete函数之后,要求精确匹配

堆上创建都是用指针创建

Initializer_list<>

initializer_list<XXX> list自动管理内存进行构造创建

一般的{}都是这个原理

用这个做参数的好处是可以把{}的东西当对象接进来,然后尽心堆上的拷贝与备份

3.forward_list  list1.before_begin()链表的头节点

对于单链表而言,一个头节点存储存储着第一个节点的地址,before_begin()返回头节点的指针

单链表是没有大小的(no size)

4._if_exists(run)判断是否存在,没有就不执行,但不报错

  _if_not_exists(run)不存在就执行,      就是检测函数类型,变量是否存在

  测试模板的类型,封装的模板,可以用这个探测类型

5.模板不识别引用,只能用包装器

对模板而言,任何不加ref()的都是副本,加ref()的都是原本

6.模板带一个&,什么情况都是原本。模板自带&,无论是左值还是右值都是原本

7.模板参数:对*和&不参与构造,std::ref只是尝试模拟引用传递,并不能真正变成引用,在非模板情况下,std::ref根本没法实现引用传递,只有模板自动推导类型时,ref能用包装类型reference_wrapper来代替原本会被识别的值类型,而reference_wrapper能隐式转换为被引用的值的引用类型

8.模板可以有默认值,类型还是会根据提供的进行推断,数据才能完完整整的作为默认值

         对模板而言去直接对类型进行赋值而没有确定类型的时候必须指定出类型才可以

唯一合理的方式是:在模板的外层规定方式,内层规定制定数据

从右往左写齐,左边缺的用值推断类型

9.对模板而言,模板自动匹配星号多的

10. static_assert(a,"语句")//a不能是变量

要满足的条件,不符合则报告位置,像是下的断点

11.inline函数的限制:不递归,不static,不循环,不switch,goto,不数组

只要声明了,定义的时候无所谓

转载于:https://www.cnblogs.com/tony-xu999/p/8573985.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值