C++与C基础知识的区别
1. 变量方面
a) 变量定义的位置
C++可在需要时定义(作用域区间),而C总是在程序起始位置定义(程序过大时,不易维护)
b) 变量类型前缀方面
C++中对程序有更加强大的自动优化功能,而C中需要前缀对变量进行优化和必要控制,比如registor
c) 变量的类型方面
C++中对于变量或者函数的参数都必须有明确的说明(强类型匹配),而C中可出现fun();此类不定参数的函数
d) const(特别说明)
C++中有真正的const常量,需由子面值直接赋值,不能由变量赋值(编译时维持在符号表中),而C中都是const变量(只读变量)
e) 引用
C++增加引用类型type&, 使用引用必须在定义时初始化,代表初始化变量的内存空间的别名,编译器处理时转化为指针常量处理
2. 函数方面
a) inline函数与#define
C++中inline函数与预定义的代码段效率上等效,但inline函数会检查参数类型、返回值,比C中的宏定义更安全,若需强制inline需在函数名尾部加上
XXXXXXXXX __attribute__(always_inline))(但不便于移植(__attribute__内置关键字))
b) 默认参数函数
C++中支持默认参数函数,而C中函数参数不安全如fun();
c) 重载函数
C++支持重载函数,C中不支持,本质是C++编译器在进行编译时会将重载函数的函数名带上参数信息,而C编译器对函数名不带上参数,因此无法区分
(默认函数与重载函数一般不同时使用,以免造成歧义)
d) 占位符参数
C++为向C程序兼容,支持占位符参数(即是无名参数(int = 0)),同时便于拓展。
e) C++与C函数直接的相互调用
在C++项目中extern “C”可使指定代码按照C编译器方式编译,同时C项目中可使用extern “C”对C++部分代码编译
3. 关键字方面
a) new和delete
C语言调用malloc函数库实现动态内存分配,而C++则在C++语言中新增关键字实现这一功能,使得动态分配与回收内存成为C++语言的一部分
new ----》delete new a[N] ---》delete [] a
b) extern(新意义)
extern 之前一直用于多文件变量的声明,如今利用extern “C”可实现C++与C代码之间的利用
c) namespace
C++中利用namespace实现同名标志符的共用,C中默认使用一个命名空间(默认命名空间)
d) 强制类型转化
xxx_case<type>(expression)
static_case:基本类型之间的转化
const_case:去常量化
dynamic_case:子类和父类,类与类之间转化
reinterpret:指针与指针,指针与整数之间转化(不安全较为少用)