位域
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:
struct 位域结构名
{ 位域列表 };
其中位域列表的形式为: 类型说明符 位域名:位域长度
https://blog.csdn.net/lutherarcher/article/details/56310275
do{}while(0)的妙用
在C++中,有三种类型的循环语句:for, while, 和do…while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do…while相对不受重视。
但是,最近在读我们项目的代码时,却发现了do…while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。
1. do…while(0)消除goto语句。
通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函数
2 宏定义中的do…while(0)
例如:
1 | #define S(p) 语句1;语句2; |
因为:语句2;和;后才else,那么if else结构将会出问题,所以会报错
除非你写成这样子的;
1 | #define S(p) {语句1;语句2;} |
在宏定义上加上{},并且S(p)后面不能加上;号。但是作为C++程序员,语句后面不加上分号是反人类的,所以,如果改成这样就ok了
1 | #define S(p) do{语句1;语句2;}while(0) |
此时就相当于:
1 | if(!p) |
完美!!!
https://www.cnblogs.com/flying_bat/archive/2008/01/18/1044693.html
单件模式的C++标准实现
https://blog.csdn.net/applex1122/article/details/3565629
引bai入内联函数的目的是为了解决程序中函数调用的du效率问题。zhi 函数是一种dao更高级的抽象。它的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现;函数的引入可以减少程序的目标代码,实现程序代码和数据的共享。但是,函数调用也会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。特别是对于一些函数体代码不是很大,但又频繁地被调用的函数来讲,解决其效率问题更为重要。引入内联函数实际上就是为了解决这一问题
为什么要在构造函数上添加explicit关键字进行声明
类的构造函数只有一个参数时(或者当除了第一个参数以外的其他参数都有默认值的时候, explicit关键字依然有效),最好加上explicit关键字进行显示声明,防止类构造函数的隐式自动转换.
https://blog.csdn.net/guoyunfei123/article/details/89003369
为什么要将析构函数声明位虚函数?
struct{}里面添加构造函数和析构函数以及普通函数的作用
struct与class是小异大同。struct默认访问权限是public,class是private;class有继承,多态机制,而struct没有。与C语言的区别:
1、C++中struct可以定义函数,但是C语言中struct只可以定义函数指针。
2、C语言中sizeof( struct ),会把定义的函数指针计算大小;C++中sizeof( struct ) 和 sizeof( class )都不会计算函数的大小,只会计算成员变量的大小。
1 | ///myParam.h/// |
memset(this, 0, sizeof(this));
有时候类里面定义了很多int,char,struct等c语言里的那些类型的变量,我习惯在构造函数中将它们初始化为0,但是一句句的写太麻烦,所以直接就memset(this, 0, sizeof *this);将整个对象的内存全部置为0。对于这种情形可以很好的工作,但是下面几种情形是不可以这么使用的:
1.类含有虚函数表:这么做会破坏虚函数表,后续对虚函数的调用都将出现异常
2.类中含有C++类型的对象:例如,类中定义了一个list的对象,由于在构造函数体的代码执行之前就对list对象完成了初始化,假设list在它的构造函数里分配了内存,那么我们这么一做就破坏了list对象的内存。
某些人认为不应该在构造函数中使用this指针,因为这时this对象还没有完全形成。
但是,只要小心,是可以在构造函数中使用this指针的:
1 | void init() |
1 | #ifndef SAFE_RELEASE |
结构体内嵌比较函数:
bool operator < (const node &x) const {}
传参时 const string& 相对 const string 有哪些优势?
https://blog.csdn.net/xiongchengluo1129/article/details/79123487