摘要: 运行时类型识别(RTTI)的引入有三个作用: 1. typeid操作符的实现 1.1. 静态类型的情形 C++中支持使用typeid关键字获取对象类型信息,它的返回值类型是const std::type_info&,例: 理论上讲,编译器会为每一种类型生成一个能唯一标识该类型的类型信息对象,type 阅读全文
posted @ 2016-06-10 19:08 malecrab 阅读(10281) 评论(1) 推荐(2) 编辑
摘要: 1. 虚表与“虚函数表” 在“C/C++杂记:虚函数的实现的基本原理”一文中曾提到“虚函数表”的概念,只是为了便于理解,事实是:虚函数表并不真的独立存在,它只是虚表(virtual table)中的一部分内容。例: 从图中可已看出,虚表除了包含虚函数指针,还包含其它一些信息(如:RTTI信息、偏移值 阅读全文
posted @ 2016-06-10 10:52 malecrab 阅读(9330) 评论(2) 推荐(1) 编辑
摘要: 1. 概述 简单地说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。例: 其中: B的虚函数表中存放着B::foo和B::bar两个函数指针。 D的虚函数表中存放的既有继承自B的虚函数B::foo,又有重写(overr 阅读全文
posted @ 2016-06-09 21:06 malecrab 阅读(42217) 评论(0) 推荐(20) 编辑
摘要: 1. 数据成员指针 对于普通指针变量来说,其值是它所指向的地址,0表示空指针。 而对于数据成员指针变量来说,其值是数据成员所在地址相对于对象起始地址的偏移值,空指针用-1表示。例: 代码示例: struct X { int a; int b; }; #define VALUE_OF_PTR(p) ( 阅读全文
posted @ 2016-06-09 11:11 malecrab 阅读(8458) 评论(0) 推荐(4) 编辑
摘要: 某些时候,我们需要将指针赋值为空指针,以防止野指针。 有人喜欢使用NULL作为空指针常量使用,例如:int* p = NULL;。 也有人直接使用0值作为空指针常量,例如:int* p = 0;。 前者可能觉得:NULL作为空指针常量,名字很形象,可读性较强。 后者可能觉得:NULL并不是C/C++ 阅读全文
posted @ 2016-06-08 12:54 malecrab 阅读(12909) 评论(0) 推荐(1) 编辑
摘要: 1. Unicode与ISO 10646 全世界很多个国家都在为自己的文字编码,并且互不想通,不同的语言字符编码值相同却代表不同的符号(例如:韩文编码EUC-KR中“한국어”的编码值正好是汉字编码GBK中的“茄惫绢”)。因此,同一份文档,拷贝至不同语言的机器,就可能成了乱码,于是人们就想:我们能不能 阅读全文
posted @ 2016-03-21 15:13 malecrab 阅读(25036) 评论(6) 推荐(19) 编辑
摘要: 前一篇博文:ANSI是什么编码?中有这样一段小故事: 话说计算机是由美国佬搞出来的嘛,他们觉得一个字节(可以表示256个编码)表示英语世界里所有的字母、数字和常用特殊符号已经绰绰有余了(其实ASCII只用了前127个编码)。后来欧洲人不干了,法国人说:我需要在小写字母加上变音符号(如:é),德国人说 阅读全文
posted @ 2016-03-21 15:08 malecrab 阅读(12566) 评论(1) 推荐(4) 编辑
摘要: 用Notepad++创建一个文本文件text.txt,其默认编码格式为ANSI(乍看之下,还以为是ASCII呢),输入汉字居然不是乱码: 保存为test.txt,发送给你美国的同事Bob。他也用Notepad++,不幸的是,却发现你的文件内容是这样的: 也许你会认为:你用的是中文系统,能正常显示中文 阅读全文
posted @ 2016-03-21 15:07 malecrab 阅读(48508) 评论(17) 推荐(53) 编辑