一、默认值

1、C语言

C89标准无默认值

C99标准有默认值

最新的标准:C11

2、C++

C++99标准

C++11标准

从右向左依次给出默认值

参数的默认值只能给1次

 

例:

int Sum(int,int);
int main()
{
Sum(10,20);
Return 0;
}

 

编译时√

链接出错:因为函数没有定义(实现),符号解析出错

 

二、内联函数(inline)

inline函数:在函数调用点直接展开

(1)内联函数修饰声明时无作用

(2)在Debug版本下无作用

1、内联函数与普通函数的区别

普通函数:(1)函数调用过程

(2)函数执行过程

内联函数:无函数调用过程

2、内联函数和static修饰的函数的区别

(1)static修饰的函数有堆栈调用过程,内联函数没有函数调用过程

(2)static修饰的函数有符号生成(local),内联函数无符号生成

共同点:本文件内部有效

3、内联函数和宏定义的区别

(1)宏在预编译期间,无类型检查,无安全检查

inline在编译期间,有类型检查,有安全检查

(2)宏不能调试,内联函数inline可以调试

4、内联函数的缺点:空间换时间

代码膨胀为代价来提高效率

缺少函数调用的开销

5、什么情况用inline合适?

当函数调用开销  远大于  函数执行的开销

6、所有函数都能设成inline函数吗?

如:递归、循环  编译器不会将它们在函数调用点展开





三、函数重载




sem_open 有默认值_默认值



1、函数重载的条件

(1)函数名相同

(2)形参类型不同、形参个数不同、形参类型顺序不同

(3)相同作用域下

 

C/C++由于生成符号的方式不同,C语言只和函数名有关,所以C语言不能重载。

例:

C:int sum(int,int) ----> _sum()
C++:int sum(int,int) ----> _sum_int_int()

 

四、const

1、C语言:const:常变量

编译期间,看这个变量有无作左值

2、C++:const:常量

          (1)必须初始化

(2)编译时:对于所有用到该常量的地方,直接进行替换

(3)const常量:可以作数组的下标

(2)拿变量初始化常量时,const退化成常变量

例如:

const int a = b ;

(5)const修饰的符号是一个local

 

五、引用

表层:起别名

底层:指针指向

例子:

void Swap(int &pa,int &pb)
      {
        int tmp = pa;
          pa = pb;
          pb = tmp;
      }

(1)引用必须初始化

(2)引用不能再修改,再引用

(3)引用占内存

(4)编译期间处理的时候,对所有使用引用的地方,编译器默认加一个解引用

(5)引用不参与类型,要和类型结合在一起

六、参数

1、实参传形参的过程:初始化的过程

2、const不会对实参有影响

3、不能返回局部变量的指针或引用

七、const 和 返回值

寄存器带出的值不能取地址&

引用&的时候有临时变量产生