从5月11日开始看effective c++,半年没看c++了,现在看居然还能看懂QAQ(我属于小白类型,连入门都算不上),把一些自己看完之后的重点总结写一下,便于今后可以回过来看看自己有什么收获。话不多说,开始今天的第一篇!!
第一章:让自己习惯c++
条款01:视C语言为一个语言联邦(View C++ as a federation of languages)
说实话这个主要就是让我们了解一下c++这门语言,讲的就是四点:1. C C++是以C为基础;2. Object-Oriented C++ (C with class),在原有C基础上加上面向对象的特性,封装、继承、多态…等;3. Template C++ (泛型编程);4. STL 一个特殊的template程序库,懂得都懂这东西0.0。
以上四个次语言的切换遵守编程策略
请记住:
c++ 高效编程守则视状况而变化,取决于你使用C++的哪一部分。
条款02:尽量以const、enum、inline替换#define(Prefer consts、enums、and inline to #define)
#define ASPECT_RATIO 1.653
换成
const double AspectRation =1.653;
宏定义被预处理器拿走,记号名称ASPECT_RATIO可能没有进入记号表,编译器就会发出错误,而 AspectRation为一个语言常量,肯定会被编译器看到,一定会进入记号表。对浮点常量而言,const比define导致较少量的码。
这个const的位置不同有不同含义
const char* const authorName=“ABC”;
第一个const指向"ABC",第二个指向char*指针。
再者#define为"全局"的,一旦定义,整个编译过程有效,如果需要class专属常量(只在此class中有效)需要使用const
class ConstEstimate{
private:
static const double FudgeFactor; //声明
//static const int NumTurns=5; //错误->用于数组声明时发生错误
enum {
NumTurns=5 }; //正确
int scores[NumTurns]
...
};
const double CostEstimate::FudgeFactor=1.35; //定义
//const int ConstEstimate::NumTurns=5; //错误
这里可能会发生错误,在编译期间需要知道数组的大小,改用"the enum hack"。
#define CALL_WITH_MAX(a,b) f((a)>(b)?(a):(b))
int a=5,b=0;
CALL_WITH_MAX(++a,b); //a被累加两次
CALL_WITH_MAX(++a,b); //a被累加一次
a的递增次数取决与和谁比较,有点烦!!
template<typename T>
inline void callWithMax(const T& a, const T& b){
f(a>b?a:b)