内联函数
什么是内联函数
内联函数就是程序在编译的时候,将程序中出现的内联函数的调用用具体的函数体替换。这么做的目的就是为提高程序效率
内联函数和宏的区别
- 内联函数在运行时可调试,而宏定义不可以;
- 编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;
- 内联函数可以访问类的成员变量,宏定义则不能;
- 在类中声明同时定义的成员函数,自动转化为内联函数。
内联函数的扩展可以参考博客:c++内联函数的介绍
结构中声明变量使用“:”的含义
1 | struct mybitfields |
结构中,变量后面的冒号是指的是该变量所占用的位数。所以我们可以知道该结构体中,a占了4位,b占了5位,c占了7位,恰好为2个字节,下面是简单的示意图:1
2
3
4
5变量名 位数
test 15 14 13 12 11 10 9 |8 7 6 5 4 |3 2 1 0
test.a | |0 0 1 0
test.b |0 0 0 1 1 |
test.c 0 0 0 0 0 0 0 | |
所以,通过&test取得两个字节的地址的内容,存放在i中的二进制的值为:
1 | 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0=50 |
派生类对象中,可以访问基类中的:
- 公有继承的公有成员
- 公有继承的保护成员只能在派生类中访问
有关类继承的博客可以参考博客:c++的继承总结
使用位运算实现两个数的交换
1 | a=a^b; |
原理
1 | 1 ^ 1 == 0; |
通过上图,我们可以知道,只要是和0异或就是保留原来的值,和1异或就是将原来的值取反。则通过异或进行值交换的整个流程是:
- 第一次异或是把两个数的二进制数中的相同的部分和不同部分区分开来,相同的则就是设置为0,代表不用修改的。不同的部分就设置为1,代表待会需要修改的部分
- 第二次异或是通过与b异或后,就可以得到a的原来的值
- 第三次异或是通过与原来a的值异或后,就可以得到原来b的值
通过上述三个步骤,就可以完成两个数的交换。
其他扩展
1 | a=a+b; |
上述,同样是完成两个数交换的一种方法。
总结
c++内联函数是一种很好的替换宏函数的一种机制,如果是宏常量就需要使用const去替换。位运算是一个高效简单的东西,以后想问题的时候可以多往这个方向考虑