1、main函数定义
在 C++ 中 int main() 和 int main(void) 是等效的,都代表参数默认,但在 C 中int main() 代表编译器对是否接受参数保持沉默,int main(void)表示无参数。
2、数据类型
C++新增布尔型(bool)及宽字节型(wchar_t)
3、关键字
C++特有关键字:
四种强制类型转换关键字:
- static_cast:内建类型之间的强制类型转换及继承关系类的指针及引用之间的转换,不做类型安全检查。
- dynamic_cast:继承关系类的指针及引用之间的转换,做类型安全检查即只能子类去强制转换成基类。
- const_cast:间接去除或增加任意类型的变量(包含指针、引用)的const属性。
reinterpret_cast:强制类型转换、任意无关的指针类型包括函数指针都可以进行转换。
mutable:用于修改const函数中的变量
explicit:((显式的)的作用是"禁止单参数构造函数"被用于自动型别转换)
export:当需要引用模板类型,则必须在定义这些模板类对象和模板函数时,使用标准 C++ 新增加的关键字 export(导出)。
C++中改变的关键字:
const:(1)const修饰的成员函数不能修改任何的成员变量(mutable修饰的变量除外),所以里面不能调用非const函数
(2)用const定义了一个常量后,不会分配一个空间给它
auto:C语言中,在函数内定义变量时,如果没有被声明为其他类型的变量都是自动变量,且定义时不必初始化。
而在C++中auto关键字是一个类型说明符,使用前必须初始化,以便进行类型推导。
应用场景为:
- 1、用于代替冗长复杂、变量使用范围专一的变量声明。
- 2、在定义模板函数时,用于声明依赖模板参数的变量类型。
- 3、模板函数依赖于模板参数的返回值
auto类型推导无法推导出引用,它仅仅是一个占位符,它并不是一个真正的类型,不能使用一些以类型为操作数的操作符,如sizeof或者typeid。
4、内存分配
C++中一般使用new/delete分配删除内存,而C中一般使用malloc/free分配删除内存
5、struct结构体不同
(1)C++语言将struct当成类来处理的,所以C++的struct可以包含C++类的所有东西,例如构造函数,析构函数,友元等
(2)C++使用结构体声明变量时,可以不带struct关键字
6、引用
C++相对于C,多了一个引用。详情见引用详解