1、二义性:在实参中注意不要使用带有副作用的运算符,此时可能造成二义性。
使用对参数求值顺序不同的编译器造成的二义性:
add(++x,x+y) //自左至右 5 11 自右至左 5 10
注意:
函数参数求值顺序与参数默认值补足顺序不同
参数求值顺序:由编译器决定求值方向;
参数默认值补足顺序:自左向右
2、c++在函数定义时可以指定,一个或者多个参数指定缺省参数值:
int add(int x,int y=10);
例如:add(15); <=> add(15,10);
指定的缺省参数值也可以是复杂的表达式!!!
3、内联函数的引入:
目的:解决程序中一些函数体代码不是很大,但是又频繁被调用的函数的函数调用的
效率问题。
解决方法:以目标代码的增加为代价来换取时间上的节省;即在编译时将函数体中的
代码替换到程序中,增加了目标程序代码量,进而增加了空间开销,从而
在时间开销上不想函数调用时那么大。
特点:类结构中所有类说明内部定义的函数都是内联函数;
内联函数具有与带参数宏定义#define相同的作用和相似的机理,但内联函数具
有宏定义的所有优点而没有其缺点,它消除了宏定义的不安全行。
4、函数的重载
函数不能以返回值为重载条件。
同时对于缺省类的函数不能重载,原因在于编译器不能唯一确定调用哪个函数(fun(3)
或fun(3,0)),例:
void fun(int x,int y = 0);
void fun(int x);
5、异常处理的基础
当一些函数在执行过程中出现了一些不平常的情况,或运行结果无法定义的情况,使得
操作不得不中断时,就会出现异常。
异常的处理流程:在满足throw异常的条件后,就会直接执行catch()中的处理,而不是
顺序执行下去。
Div()
{
...
throw e; //出错的话扔出异常,即引发异常。
...
}
try
{
cin>>x>>y; //防止发生异常,所要保护的段落,即捕获异常。
result = Div(x,y);
cout<<"Continune."<<endl;
}
catch() //在发生异常throw后,所要进行的处理,即异常处理。
{
...
}
6、作用域
类作用域:
类X的一个成员M在下列情况下局部于X,或者说具有类作用域:
>M出现在X的成员函数内,该成员函数没有声明同名的局部作用域的标示符;
>在x.M这样的表达式中,其中ptr为指向X类型的一个对象的指针;
>在X::M这样的表达式中;
重新定义标示符的作用域规定:
在某个范围内定义的标示符在该范围内的子范围可以重新定义该标示符。这时,
在原定义的标示符在子范围内是不可见的,但是它还是存在的,只是在出现同
名的情况下被隐藏起来。过了子范围后,它又是可见的。
使用对参数求值顺序不同的编译器造成的二义性:
add(++x,x+y) //自左至右 5 11 自右至左 5 10
注意:
函数参数求值顺序与参数默认值补足顺序不同
参数求值顺序:由编译器决定求值方向;
参数默认值补足顺序:自左向右
2、c++在函数定义时可以指定,一个或者多个参数指定缺省参数值:
int add(int x,int y=10);
例如:add(15); <=> add(15,10);
指定的缺省参数值也可以是复杂的表达式!!!
3、内联函数的引入:
目的:解决程序中一些函数体代码不是很大,但是又频繁被调用的函数的函数调用的
效率问题。
解决方法:以目标代码的增加为代价来换取时间上的节省;即在编译时将函数体中的
代码替换到程序中,增加了目标程序代码量,进而增加了空间开销,从而
在时间开销上不想函数调用时那么大。
特点:类结构中所有类说明内部定义的函数都是内联函数;
内联函数具有与带参数宏定义#define相同的作用和相似的机理,但内联函数具
有宏定义的所有优点而没有其缺点,它消除了宏定义的不安全行。
4、函数的重载
函数不能以返回值为重载条件。
同时对于缺省类的函数不能重载,原因在于编译器不能唯一确定调用哪个函数(fun(3)
或fun(3,0)),例:
void fun(int x,int y = 0);
void fun(int x);
5、异常处理的基础
当一些函数在执行过程中出现了一些不平常的情况,或运行结果无法定义的情况,使得
操作不得不中断时,就会出现异常。
异常的处理流程:在满足throw异常的条件后,就会直接执行catch()中的处理,而不是
顺序执行下去。
Div()
{
...
throw e; //出错的话扔出异常,即引发异常。
...
}
try
{
cin>>x>>y; //防止发生异常,所要保护的段落,即捕获异常。
result = Div(x,y);
cout<<"Continune."<<endl;
}
catch() //在发生异常throw后,所要进行的处理,即异常处理。
{
...
}
6、作用域
类作用域:
类X的一个成员M在下列情况下局部于X,或者说具有类作用域:
>M出现在X的成员函数内,该成员函数没有声明同名的局部作用域的标示符;
>在x.M这样的表达式中,其中ptr为指向X类型的一个对象的指针;
>在X::M这样的表达式中;
重新定义标示符的作用域规定:
在某个范围内定义的标示符在该范围内的子范围可以重新定义该标示符。这时,
在原定义的标示符在子范围内是不可见的,但是它还是存在的,只是在出现同
名的情况下被隐藏起来。过了子范围后,它又是可见的。