1. 预处理指令
#ifdef max
#pragma message("#undefing marco max")
#undef max
#endif // max
-
这段预编译代码的功能是:(#ifdef max) 如果标识符 max 已经用宏定义进行过定义,那么执行下面内容:
-
在编译输出窗口打印文本 “#undefing marco max” (#pragma message("#undefing marco max"))
-
删除事先定义的宏定义 max (#undef max)
2. 模板类 vector
2.1 静态断言 static_assert
static_assert(!std::is_same<bool, T>::value, "vector<bool> is abandoned in mystl");
- std::is_same<bool, T>::value, 如果传入模板参数是bool,那么 std::is_same<bool, T>::value 值为true。
- std::is_same<bool, T>::value 会对int、const int、int& 和const int&都会严格区别开来。但是有些时候,我们希望程序将这些都识别为同一类型。因此,这个时候就需要 std::decay<T>::type 对类型进行退化处理,也就是这样1:
std::is_same<typename std::decay<T>::type,int>::value
-
静态断言是编译期间的断言,因此叫做静态断言。其语法很简单:static_assert(常量表达式,提示字符串)。如果第一个参数常量表达式的值为false,会产生一条编译错误,错误位置就是该static_assert语句所在行,第二个参数就是错误提示字符串.
-
该静态断言的代码含义:如果传入模板类型是bool的话,就会产生断言错误,并在编译窗口打印 “vector is abandoned in mystl”。
2.2 typname
"typename"用于指出模板声明(或定义)中的非独立名称(dependent names)是类型名,而非变量名