Effective C++ 筆記1

條款1:視C++爲一個語言聯邦編程

一、C、Object-Oriented C++、Template C++ 、STL 組成了C++,高效編程取決你使用C++的哪一部分安全

 

條款2:儘可能用const ,enum,inline替換 #define函數

一、Const 代替 #define中普通的宏,編譯器會對類型進行檢查避免類型錯誤。spa

//如這裏
#define PI 3.1415
//最好用const代替,一旦定義錯了define只會對3.1415進行提示,而不會對PI進行提示,由於在預處理的時候PI已經被3.1415代替了
Const double PI=3.1415

 

二、inline 代替#define中形似函數的宏,贊成能夠避免宏定義錯誤指針

 

//這樣定義不安全
#define CALL_WITH_MAX(a,b) f((a)>(b)?(a):(b))
//採用inline
template<typename T>
inline T callWithMax(const T& a,const T& b)
{
    return a>b?a:b;   
}

 

三、類中有const 必需要有static,有const就表示該屬性是隻有一份因此必須也是靜態的code

Class C
{
    static const int pi;    
}

 

四、若是不容許類中static初始化,那麼用enum代替對象

//舊的編譯器不支持static在聲明時得到初值
Class C
{
private:
    static const double PI;
};    
const double C::PI=3.14159;
//因此用這種方式來定義靜態變量
Class C
{
privateenum{num=5};
};

 

五、Ifdef/ifndrf 能夠防止類被重複引用blog

#ifdef _TEST_
#define _TEST_

int max(int a,int b);

#endif

 

 

條款3:儘可能使用const隊列

一、Const出如今星號左邊,被指物是常量。右邊指針自身是常量編譯器

char greeting[]="hello"
//值常數
const char* p=greeting;
//指針常數
char* const p =greeting;
//指針和值都是常數
const char* const p=greeting;

二、Const定義迭代器錯誤,應該使用const_iteator

std::vector<int> vec;

const std::vector<int>::iterator it=vec.begin();
*it=10;
//錯誤 迭代器自己是常量
++it;
    

std::vector<int>::const_iterator it=vec.begin()
//錯誤,該迭代器指向的值是常量
*it=10;
++it;

三、函數返回 const 可避免無心義的賦值動做

 

條款4:肯定對象使用以前已先被初始化

一、  永遠在對象使用以前初始化

二、  類中初始化不要用構造函數賦值的形式,要使用成員初值列

class C
{
    int a;
    int b;
    int c;
        //初始化隊列 
    C(int x,int y)
        :a(x),
         b(y),
         c(1)
    {
    }
};
相關文章
相關標籤/搜索