关键字、操作符与库函数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去抓取。

posted @ 2021-06-19 18:31  stagonie  阅读(580)  评论(0编辑  收藏  举报