随笔分类 - C++思考与总结
摘要:C语言的强制类型转换的功能更通用,即它具有static_cast, const_cast和reinterpret_cast相似的行为。 但是, static_cast只能应用于明确定义了的类型转换,并且不能用于底层const(lower const)的转换。 const_cast只能改变底层cons
阅读全文
摘要:目前为止,我并没有找到C++中数学意义上的取模操作。%是一种取余运算。 假设 ,关于取模与取余的一点概念有: 公式都是: ,`r = a c b` 对于 的结果,取模和取余等价 如果`a / b 那么,C++中什么时候会用到取模? 在类型转换时,当把一个超出范围的值v赋给一个无符号类型时,其计算方法
阅读全文
摘要:项目代码里,若读取一个配置字段存储到bool类型里,那么此配置字段默认只有两种取值:0或者1。而用istringstream从字段字符串输出到存储变量时,通常不会 到一个bool变量。这是为什么呢? 起初猜想istringstream不支持 到一个bool类型变量,但测试后发现这种怀疑是多余的,毕竟
阅读全文
摘要:所谓数组,有这样的性质: 从0开始,且有一个最大长度 支持[]运算符,且越界是一个危险操作 C语言中的数组,一旦长度定义,就不能改变。有时候需要动态增加数组长度,而且想保留上述性质,这时候就可以用vector。 vector模拟了C语言中数组的操作,比如[]取值,下标越界未定义等。最重要的,它支持
阅读全文
摘要:本质上,int变量将其最低一个字节的内容,赋值给char变量。如下代码:int a = 0xFFFFFF41;char c = a;printf("c: %c\n", c);根据小端存储模式,a的低位一字节存放的是十六进制数41,它的十进制数是65,对应的ASCII字符是A。由于a的低位一字节内容赋...
阅读全文
摘要:1.#include 引用的头文件应当是编译器中的类库目录下的头文件。2.#include "" 引用的头文件是程序目录下的头文件。3.如果#include "" 中引用的文件在程序目录下未能找到,将从编译器中的类库目录下继续找。
阅读全文
摘要:2021年11月22日更新 我在2015年写下的这篇博客,目前来看标题的描述应当是不正确的,这篇博客应当是我学习C++时的一个思考,结论并不能说正确。按照 《Effective Modern C++》的描述,如果能取得表达式的地址,则基本可以断定是一个左值。 而匿名对象这个概念,其实是比较模糊的。所
阅读全文
摘要:如果写成 p == NULL,有可能误写为 p = NULL,那么编译器并不会报错,但却不是程序想要的结果。因此写成 NULL == p 来防止这样的编码错误。实际上两者效果是一样的。
阅读全文
摘要:父类类型指针可指向子类对象,调用子类对象重写的虚函数,一条代码即有了不同的表现结果,也就是多态。 很显然,子类重写的虚函数里调用的自然是子类的成员变量,父类类型指针是无法直接访问到子类的成员变量的。那么既然是父类类型指针调用的子类的虚函数,那么传给this的自然就是父类类型的指针,那么又如何能...
阅读全文
摘要:类的虚函数调用是通过虚函数表实现的。所谓虚函数表,是编译器自动为一个带有虚函数的类生成的一块内存空间,其中存储着每一个虚函数的入口地址。由于函数的入口地址可以看成一个指针类型,因此这些虚函数的地址间隔为四个字节。而每一个带有虚函数类的实例,都拥有一个虚函数指针——vptr,在类的对象初始化完毕后...
阅读全文
摘要:一个自定义类,如果没有重载其=运算符,那么编译器将自动生成一个。但是此编译器自动生成的重载函数可能不安全。这是因为它采用了所谓的“浅拷贝”,也就是对于指针而言,它拷贝的是指针的值,而不是其指向的内存空间。那么这个内存空间就有了两个指针指向它,且类对象要析构两次,但是内存空间只能被释放一次,那么第二次
阅读全文
浙公网安备 33010602011771号