C++基础知识面试必备、复习细节 (9) {enum new union extern}
new和delete
- new表达式三步操作:
- new调用一个名为operator new(或operator new[])的标准库函数,该函数分配一块足够大的、原始的、未命名的内存空间以便存储特定类型的对象(或者对象的数组)
- 编译器运行相应的构造函数以构造这些对象,并传入初值
- 对方被分配空间并构造完成后,返回一个指向该对象的指针
- delete表达式两步操作:
- 对所指的对象或者所指的对象数组中的元素执行对应的析构函数
- 编译器调用operator delete(或operator delete[])的标准库函数释放内存空间
枚举类型enum
-
枚举类型中的元素具有默认值,默认为0,1,2…
-
枚举元素按照常量处理,但不能对其赋常量值
-
enum <类型名> {<枚举常量表>}; enum color {RED,YELLOW,GREEN}; color a=RED; //a被赋值为RED enum weekday{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
-
使用enum主要是当某些变量具有固定的几个可选值时,通过枚举可以增强程序的可读性,减少犯错概率
联合union
-
union是一种特殊的类,可以有多个数据成员,但是在任意时刻只有一个数据成员有值
-
因此union的存储空间(即sizeof大小)是其最大的数据成员的存储空间。所有变量的起始地址相同,因此当修改时等于是一个覆盖。
-
union Token { char cval; int ival; double dval; }; Token first_token = {'a'}; Token second_token = {2}; if(first_token.cval=='a') cout << "true" << endl; //cout: true
c++不可移植性
-
volatile限定符:当对象的值可能在程序的控制或检测以外被改变时,应该将对象声明为volatile,关键字volatile告诉编译器不应该对作用的对象进行优化
-
extern “C” 链接指引:
-
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名
-
通常用于:C++代码调用C语言代码 或 在C++的头文件中使用
-
被extern "C"修饰的变量和函数是按照C语言方式进行编译和链接的
-
extern "C" size_t strlen(const char *); extern "C" { //some C code }; extern "C"{ #include<string.h> //c头文件 }
-