C++ 第二次学习 bool...
C++ 第二次学习
1.Bool类型
2.内联函数
3.引用
4.函数重载与参数缺省
Bool类型
1.独属于c++的逻辑类型
2.取值为true或false,但在控制台输出为1/0
3.定义方式 (与基本类型类似)Bool istrue =1;
4.内存大小占用1字节
内联函数
内联函数是程序员对编译器提出的一个建议,建议编译器在编译程序代码的时候,把该函数的代码 内嵌到程序代码中具体调用该函数的位置,将这个函数放在代码区,调用时不再进出栈区,由此提高程序执行效率,节省栈区空间。但是具体是否内联成功,还是要由编译器决定。
内联函数的关键字为 inline ,将关键字放在所要内联的函数的定义之前,注意,是定义,放在声明前是没意义的。
不是所有函数都适合内联的,一般我们将要重复调用并且函数代码简单(一般不超过10行)(简单运算或者赋值)设置为内联函数。此外,还有一些补充点:
①内联函数中不建议使用循环或者开关语句,这样有违内联函数初衷,会导致代码膨胀,有些编译器会报错,有些不会。
②在类内定义的成员函数都是内联函数。
③递归函数、虚函数等不会被正常内联
内联函数的应用
一:定义类成员变量的存取函数
1 | class demo{ |
二:实现宏的效果
宏在使用时,不进行参数检查,容易出现二义性。比如实现计算x平方:
1 |
若输入参数为表达式:a++; (a=4),
他们本意是希望得到(a+1) (a+1)的结果,而实际上呢?我们可以看看宏的展开结果: (a++) (a++),如果a的值是4,我们得到的结果是5*6=30,而我们想要的是25。
改为内敛函数则无此歧义,因为内敛函数是真正的函数,执行的是函数的调用。
1 | inline int square(int x){ return x*x;}; |
引用
取引用的符号是& ,这与变量的取址符不一样。取引用就是一个取别名的过程。
1 | int a=0; |
如上述,定义了一个a的引用,结果:
①b就是a,b可以当作a使用;
②取引用就不能修改引用的对象;
函数重载
函数重载的条件是函数名一致,参数列表不一致,所谓的参数列表不一致,就是:
参数列表的参数个数、参数类型、参数顺序不一致(满足一个即可);
函数重载要避免产生的二义性:(当参数不匹配时,编译器的隐式转换作祟)
看一个例子:
1 | //有两个函数add,构成重载 |
此时,2.5实际上为double类型,找不到匹配的参数,编译器会强转这个double类型参数,可以转为int,也可以转为float,编译器不知道怎么做,会报错。
解决方式:①再写一个匹配的函数;
②改变传入的参数,可以使用显式转换。
1 | add((int)2.5) |
参数缺省
函数参数缺省本质就是设置默认值,要求从右到左缺省。缺省的设置在函数的定义或声明其中一个中完成就可以。
注意:缺省值只能是常量
函数缺省要避免与函数重载产生二义性:
1 | //有两个函数 |
此时编译器不知道是调用两个函数中的哪一个,会报错
解决办法:没有,只能取消缺省或者取消重载。