函数参数可以赋默认值(C++)
- 在函数声明或者定义的地方,给参数赋默认值;在同一作用域下(或者说同一文件内,因为在程序只会依据本文件中的默认值生成指令,而不会管另外的文件传的默认值),函数参数赋默认值的顺序为从右至左,不可重复赋值。
- 在函数调用的时候,可不必穿参数,会默认传默认值;
宏函数和inline(内联)函数(C++)
- 宏函数的特点:不存在栈帧的开辟;不存在参数的带入;不存在返回值的带出;不存在参数清除;不产生符号;特别大的死肋是不存在类型检查,不可以调试;在预编译期在调用点展开;
- Inline函数的特点:内联函数的形式是在普通函数前加inline关键字;内联函数会在编译期在调用点展开;在debug版本中可以调试,也会进行函数栈帧开辟等操作,产生一个local符号;在realse版本中不产生local符号,也不会进行栈帧开辟等操作,会在调用点展开。
- 注:内联函数不一定会展开,如果编译器不清楚函数的调用次数,内联函数就不会展开,就相当于普通函数。
函数重载(C++)
- C语言生成的符号是依靠函数名;而c++生成的符号是依靠(函数名+参数列表);
- C++函数重载:在同一作用域下,函数名相同,参数列表不相同。切记:返回值不参与重载,重载函数调用类型要明确;
- 注:当有多个函数重载的时候,可能会存在类型转换,与多个重载函数匹配;
const(c++的使用)
- c++中const定义的是常量,是一个不允许修改的值,在编译期的时候将使用该常量值的地方替换成常量的值;而在c中const定义的是一个常变量,可以通过一定的方式来修改它;
- C++中的const是常量必须初始化,而c中const是常变量,可以先不初始化;
C++中const产生的符号是local,因为编译期是针对单个文件的,哪怕const生成一个全局变量,根本访问不到;
- c++常量可以退化成常变量(编译期无法确定其值的时候会退化);
在上述图中,要对c的地址访问取值时,要在运行期才进行,所以d退化成常变量。
- const修饰
const修饰的类型是离它最近的完整类型;
const修饰的内容是它修饰类型的内容;
const修饰的内容不允许被改变;
不允许泄漏常量的地址给非常量的指针;
引用(C++)
- 引用必须初始化
- 是一个对象,是对其底层是个指针的封装,在使用时替换指针的解引用;
- 不允许泄漏常量的引用给一个非常量的引用
- 引用一个临时量,如下:
总结:标准类型产生的临时量是常量;自定义类型产生的临时量是非常量;引用单独使用不参与类型;const单独使用不参与类型;const和引用结合使用参与类型;const修饰指针,如果修饰的内容里没有*,则const不参与类型
动态内存的申请
- C语言申请内存和释放内存用的是malloc和free,c++用的是new和delete;
命名空间,需要时就使用
自定义类型
- C语言自定义类型中,只允许存放成员变量;而c++自定义类型在存在成员变量和成员方法;c++中成员方法不占内存,因此c++自定义类型可以为空结构体,size为1,作为有效的标志;而c不能定义空的结构体,是不被允许的;
根本区别
- C++是面向对象:对象+对象+……+消息(半面向对象)
- C是面向过程:函数+数据
c语言代码与c++代码如何互相调用
- c++调用c语言代码:
- c语言调用c++代码:在cpp文件中将c语言要调用的代码,用c语言的规则编译即可