高效C++:让自己习惯C++
-
面向过程,面向对象,泛型编程,元编程,C++同时支持,强大而迷惑
-
C++语言可以分为如下4个部分:
-
C,C语言相同
-
C with Class,包括封装、继承、多态...
-
Template C,模板元编程
-
STL,标准C++的一部分,主要是和容器、迭代、算法等有关
-
-
每个部分有每个部分自己的高效规则,不通用,注意区分
const int Test::Num = 5; class Test { private: static const int Num; int Data[Num]; }
-
以枚举代替define
class Test { public: enum DATATYPE {ONE = 1, TWO = 2}; //作用域为类内,类外加类名访问 }
-
以inline替代define
template<typename T> inline void Max(const T& lhs, const T& rhs) { //函数实现 } 替代 #define Max(a, b) ((a) > (b) ? (a) : (b)
-
enum和#define不能取地址
-
对于单纯的常量定义,以const或enum代替define
-
对于函数宏,以inline函数代替
-
原因:
-
明确变量和方法的行为
-
防止误赋值的情况
-
-
const可以声明任何变量、对象、参数、函数返回类型、成员函数本体
-
当const和no-const成员函数功能相同时,no-const使用类型转换调用const函数
const_cast:移除变量的const属性 static_cast: 1)完成基础数据类型 2)同一个继承体系中类型的转换 3)任意类型与空指针类型void*之间的转换 dynamic_cast: 使用多态的场景,有继承,有虚函数,向下转型时使用 reinterpret_cast: 1)改变指针或引用的类型 2)将指针或引用转换为一个足够长度的整形、将整型转换为指针或引用类型 3)不知道用哪一个类型转换就用它
extern int g_data; int& getData() { static int data; return data; }