关键字、操作符与库函数01
关键字、操作符与库函数01
> 基本定义上的区别
关键字是编译器保留的文字,不能被用户拿来重新声明,像const, new, if等等
操作符必须要有操作对象,操作符本质上可以视为编译器内置的基础的函数。操作符在c++中,可以被重载(除了部分例外,比如 . :: sizeof)。
库函数是编写在编译器头文件库里,要包含头文件才能调用的封装函数。
> sizeof与strlen的区别
sizeof是一个操作符,在编译时便运行了,而strlen是一个库函数,要在程序运行时才能运作。
sizeof的参数可以是类型名,也可以是对象,而strlen只能作用于\0结尾的字符串。
数组作为strlen参数时,会退化为数组指针。
> new、delete与malloc、free
new、delete都是c++中的操作符,其实现方式为调用函数operator new、operator delete去进行,可以被重载。
相比于malloc,new能根据对象的类型返回对应类型的指针,而malloc是返回的void型指针再进行类型转换。
new、delete会在执行时分别调用对象的构造、析构函数,而这点malloc、free无法做到,只是单纯的分配、回收内存。
malloc申请内存失败时,返回的是nullptr;new申请内存失败是,返回的是一个异常bad_alloc,可以用catch去抓取。