《深度探索C++对象模型》--7 站在对象模型的尖端
C++语言的扩充性质
1、template
(1)memberfunctions只有在被使用时,才会被实例化。
(2)注意使用template时,注意针对特定参数时可能有些操作没有定义。
template在被实例化之前只能实施有限的错误检查,有些很简单的错误编译器照样通过。
(3)template之中对于一个nonmembername的决议结果,都是由“scope ofthe template instantiation”来决定,而不是由“scope ofthe template declaration”决定的。前者用以专注于特定的实例;后者用于专注于一般的templateclass。
2、exceptionhandling (EH)
EH中类型描述符是必须的,因为真正的exception是在执行期被处理的,其object必须有自己的类型信息。RTTI正是因为支持EH而获得的副产品。
3、runtimetype identification (RTTI)
dynamic_cast运算符对某个class类型实施时,如果传回真正的地址,表示动态类型被确认;如果传回0,则表示没有指向任何object,意味着应该以另外一种逻辑试行于这个动态类型未确定的object身上。
那为什么一个reference不可以像指针一样将自己设置为0便代表了no object呢?
若将一个reference设置为0,会引起一个临时对象(拥有被参考到的类型)被产生出来,该临时对象的初值为0.这个reference然后被设置为该临时对象的一个别名。因此,当dynamic_cast运算符施行于一个reference身上时,不能够提供对等于指针情况下的true/false。
《深度探索C++对象模型》--7 站在对象模型的尖端相关推荐
- C++对象模型学习——站在对象模型的尖端
2019独角兽企业重金招聘Python工程师标准>>> 这里要讨论三个著名的C++语言扩充性质,它们都会影响C++对象.它们分别是template. exception handli ...
- 《深度探索C++对象模型》--5 构造析构拷贝 6 执行期语意学
<深度探索C++对象模型>--5构造.析构.拷贝语意学 1.纯虚函数: (1)C++可以定义和调用一个纯虚函数,不过只可以静态调用,不可以由虚拟机制调用. 注意:pure virtu ...
- 深度探索C++ 对象模型(7)-Data member的布局(虚继承)
虚拟继承 namespace ObjectMultiDerived {class Point2d {public:// has virtual functionsvirtual void print( ...
- 深度探索C++ 对象模型(7)-Data member的布局(多重继承)
多重继承 namespace ObjectMultiDerived {class Point2d {public:// has virtual functionsvirtual void print( ...
- 深度探索C++ 对象模型(7)-Data member的布局(无继承、继承无多态、继承多态、多层继承)
无继承 继承无多态 继承多态 虚表 : 用来存放基类的每一个虚函数,再加上首位的一个slots(支持RTTI). 每个class object导入一个vptr,提供执行期的链接,使得每一个class ...
- 深度探索C++ 对象模型(6)-Data member的存取
nonstatic data member 需要在class object起始地址加上该member的偏移. class A {public: int x; int y;}; A a; a.y = 0 ...
- 深度探索C++ 对象模型(6)-Data member的绑定
防御性程序设计 1).将class声明起头处放data member; 代码示例: class Point3d{ float x,y,z; public://etc } 2). class的声明处放i ...
- 深度探索C++ 对象模型(5)-Initialization list(3)
四点: 1.list中的项目次序是由class中的members声明次序决定,不是由initialization list中的的代码决定 如下代码有一个陷阱,i值为一个不可预知未初始化的值.原因是按照 ...
- 深度探索C++ 对象模型(5)-Initialization list(2)
Initialization list的作用是效率 如下代码可以编译并运行,但是效率低下 class Word {String _name;int _cnt;public:Word() { _name ...
- 深度探索C++ 对象模型(5)-Initialization list(1)
以下四种情况,一定要使用成员初始化列表: 1.初始化一个引用成员 2.初始化一个const成员 示例代码为 class Shape{const int m_size; //const 常量int &a ...
最新文章
- Waiting for target device to come online
- Transaction And Lock--锁相关基础
- python使用教程cmd啥意思-对python中执行DOS命令的3种方法总结
- 关于“粪”,你知道多少?【Feign是个什么玩意儿?】
- php 共享内存列队,php中对共享内存,消息队列的操作
- 【JQuery】jQuery中的常用方法小结
- Mysql字符串连接
- Delphi GDI对象之绘制文本
- 如何给网站添加支付宝支付功能
- linux之SVN安装
- redis/memcache监控管理工具——treeNMS
- 房屋出租系统(java)
- 【转】Windows下部署Appium教程(Android App自动化测试框架搭建)
- IT战略规划与企业架构
- 想做电商产品经理你先要学会这几件事
- C# 实现Excel导出图片
- 代码生成器技术乱弹十一,伽罗华理论与代码生成器
- 【工具】SMART原则的分析举例注意事项
- 2010公司处级聚会尾牙主持词
- 虚拟机下 centos7 网络间歇性断网
热门文章
- python 模块(Module)和包
- java Integer中隐藏的细节魔鬼!来自面试官的三轮暴击!
- Java - Get a list of all Classes loaded in the JVM[转]
- MYSQL存储过程中 使用变量 做表名--转
- kafka 集群--3个broker 3个zookeeper创建实战
- AI模型变身文豪:“看懂”新闻报道,命名图片更有文采
- 逻辑回归、决策树和支持向量机(I)
- oracle删除表中数据_工作表中提供的特定数据在数据库中批量删除的方法
- 小工匠聊架构文章一览【不间断持续更新】
- Spring Cloud Alibaba - 11 Ribbon 自定义负载均衡策略(同集群优先权重负载均衡算法)