宝杉的博客

UNIX/LINUX;ACE;SNMP;C++
posts - 33, comments - 23, trackbacks - 0, articles - 0

08-09 缺省值

Posted on 2007-08-13 10:21 宝杉 阅读(187) 评论(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++ 而言,使用宏代码还有另一种缺点:无法操作类的私有数据成员


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理