C++复习笔记
这个文档主要用于记录复习C++时记录的复习笔记
1.STL用法汇总
2.模板
#if, #if defined, #ifdef
条件编译是C语言中预处理部分的内容,是编译器编译代码时最先处理的部分。
条件编译中的判断语句有 #if, #else, #elif, 和#endif。
与if语句不同的是,如果#if后的宏条件符合,编译器就编译之后的代码,否则,编译器就忽略之后的代码不编译。
#if的使用
#if后接表达式
1 |
|
如果 (MAX==10) 成立,则编译器会编译其中的 code… 部分。
#if defined的使用
#if后接一个宏定义
1 |
|
这里的 #if defined 是判断这个程序之前的宏定义中有没有定义这个宏,如果定义了x这个宏,那么会编译器会编译其中的 code… 代码,否则,会直接忽视。
此外,还可以取反,#if !defined(x)
#ifdef的使用
#ifdef的用法与#if defined()的用法相同
#ifndef的用法与#if !defined()的用法相同
C++ typedef的用法
1.定义数据类型的别名
1 | //定义两个指针变量 |
2.方便结构体的声明、
在就旧的C代码中,结构体的声明和对象的声明如下
1 | struct tagPOINT{ |
在C++中利用typedef,可以将其写法简化为
1 | typedef struct tagPOINT{ |
虽然这种用法在C++不一定常见,但理解它对于旧代码的阅读有帮助
3.定义与平台无关的类型
比如定义一个叫REAL的浮点类型,在目标平台1上,其最高精度的类型为:typedef long double REAL
在不支持long double的平台2上,改为typedef double REAL
在不支持double的平台3上,改为type float REAL
在跨平台时,只需要修改typedef本身就行,不需要对其他源码做任何修改 。
C++标准库就用了这个技巧,虽然宏定义也可以实现,但是typedef不是字符串替换,所以更稳健。
4.为复杂的声明定义一个新的简单的别名
原声明:int*(*a[5])(int, char*)
变量名为a,直接用一个新的别名pFun替换atypedef int*(*pFun)(int, char*)
原声明的简化版pFUn a[5]
注意点
typedef是定义了一种数据类型的新别名,不同于宏,它不是简单地字符串替换。例如
先定义,typedef char* PSTR;
然后,int mystrcmp(const PSTR);
注意,此时const PSTR
实际相当于char const,而并非const char。
原因在于const给予了整个指针本身以常量性,也就形成了指针常量char const*