Posted on 2007-08-13 10:21
宝杉 阅读(194)
评论(0) 编辑 收藏 引用 所属分类:
C++
缺省值
提高程序易用性,避免每次调用函数参数都相同的情况。
缺省值只能出现在函数声明中,不能在函数定义中。
两个原因:
一是函数的实现(定义)本来就与参数是否有缺省值无关,所以没有必要让缺省值出现在函数的定义体中。
二是参数的缺省值可能会改动,显然修改函数的声明比修改函数的定义要方便。
规则:参数从后向前缺省
正确的示例如下:
void Foo(int x, int y=0, int z=0);
错误的示例如下:
void Foo(int x=0, int y, int z=0);
但要避免二义性
C++exams\default_para
运算符重载及其规则
运算符即可定义为成员函数,也可定义为全局函数。
规则如下:
运算符
|
规则
|
所有的一元运算符
|
建议重载为成员函数
|
= () [] ->
|
只能重载为成员函数
|
+= -= /= *= &= |= ~= %= >>= <<=
|
建议重载为成员函数
|
所有其它运算符
|
建议重载为全局函数
|
不能重载的运算符
(1)不能改变C++内部数据类型(如int,float等)的运算符。
(2)不能重载‘.’,因为‘.’在类中对任何成员都有意义,已经成为标准用法。
(3)不能重载目前C++运算符集合中没有的符号,如#,@,$等。原因有两点,一是难以理解,二是难以确定优先级。
(4)对已经存在的运算符进行重载时,不能改变优先级规则,否则将引起混乱。
函数内联
目的:提高执行效率。
宏
Q为什么要用?
A提高执行效率。
Q如何提高?
A宏代码本身不是函数,但使用起来象函数。预处理器用复制宏代码的方式代替函数调用,省去了参数压栈、生成汇编语言的CALL调用、返回参数、执行return等过程,从而提高了速度。
Q缺点?
使用宏代码最大的缺点是容易出错,预处理器在复制宏代码时常常产生意想不到的边际效应。
例如:
#define MAX(a, b) (a) > (b) ? (a) : (b)
语句
result = MAX(i, j) + 2 ;
将被预处理器解释为
result = (i) > (j) ? (i) : (j) + 2 ;
由于运算符‘+’比运算符‘:’的优先级高,所以上述语句并不等价于期望的
result = ( (i) > (j) ? (i) : (j) ) + 2 ;
如果把宏代码改写为
#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
则可以解决由优先级引起的错误。但是即使使用修改后的宏代码也不是万无一失的,例如语句result = MAX(i++, j);
将被预处理器解释为
result = (i++) > (j) ? (i++) : (j);
对于C++ 而言,使用宏代码还有另一种缺点:无法操作类的私有数据成员。