C++::My Effective C++
苔花如米小,也學牡丹開。
為區域性變數初始化是一個好的習慣
為只有“一條語句”的程式碼段使用大括號括起來
#define FAIL(msg)\
std::ostringsteam oss;\
oss << msg;\
throw exception(oss.str());
if (y == 0)
FAIL("除數不能為0")
這裡的FAIL("除數不能為0")
看似是一條語句其實是多條語句,在不使用化大括號的情況下,if
的勢力範圍只有一條語句,對本例而言,也就是std::ostringstream oss;
。這時編譯器就會報錯,無法識別oss
。
簡單的雙分支if判斷可以改造為三目運算子
if (x % 2 == 0)
{
return true;
}
else
{
return false;
}
改寫為:
return x % 2 == 2 ? true : false;
思維上視boost::shared_ptr<T>型別物件的“真正”型別為T*
思維上視boost::shared_ptr<T>
的真正型別為T*
,這樣可減少思維的轉換過程。鄒欣老師說過,要把智力消耗在真正值得思考的事情上去,而不是低層次的僅靠記憶便可解決的事情上來。
操縱boost::shared_ptr<T>
型別物件如同操縱T*
。中間不必做任何任何思維和行為上的轉換。不僅如此,boost::shared_ptr<T>
能夠在必要的時刻對建立在heap
上的物件做銷燬操作。
protected
vs private
一般而言用於繼承關係的基類或者存在virtual
函式的基類,它們的成員變數是protected
修飾的,不做為基類或者說不存在virtual
函式的基類,它們的成員變數都是private
的。道理很簡單,被protected
修飾的成員變數,可以繼續被派生類訪問。
牽涉到元素的拼接時,優先選用的容器是list
在所有的容器中,只有list具有把元素從一處連結到另一處而不需要拷貝任何資料的能力
list的客戶之所以選擇使用list,也恰是因為它提供了高效的連結(splice)操作,對應與list的成員函式
splice
何謂高效:把一個區間從一個list連結到另一個list可通過常數時間完成。
list的splice成員函式可以將list2的任意區間的元素連結到list1的任意一個位置(作為起始處)
int main(int, char**)
{
list<int> l1{0, 1, 2, 3, 4}, l2(l1);
// l2的[2, 4]之間的所有元素連結到l1的末尾
l1.splice(l1.end(), l2, find(l2.begin(), l2.end(), 2),
find(l2.rbegin(), l2.rend(), 4).base());
// l2的[2, 4]之間的所有元素連結到l1元素為3的位置之前
l1.splice(find(l1.begin(), l2.end(), 3), l2,
find(l2.begin(), l2.end(), 2), find(l2.begin(), l2.end(), 4));
return 0;
}
相關文章
- effective C++ : CHAPTER 8C++APT
- 【Effective Modern C++】索引C++索引
- Effective C++筆記C++筆記
- effective C++筆記1C++筆記
- 《Effective C++》讀書筆記C++筆記
- 學懂現代C++——《Effective Modern C++》之轉向現代C++C++
- Effective C++ 筆記(3)資源管理C++筆記
- Effective C++ 4.設計與宣告C++
- 《Effective C++》第三版-1. 讓自己習慣C++(Accustoming Yourself to C++)C++
- Effective C++ 條款08_不止於此C++
- Effective Modern C++ 系列之 條款2: autoC++
- 學懂現代C++——《Effective Modern C++》之型別推導和autoC++型別
- 《Effective C++》閱讀總結(三):資源管理C++
- 《Effective C++》第三版-5. 實現(Implementations)C++
- Effective c++條款11:在operator=中處理“自我賦值”C++賦值
- 《Effective C++》閱讀總結(四): 設計、宣告與實現C++
- [讀書筆記][effective C++]條款30-inline的原理筆記C++inline
- 《Effective C++》第三版-3. 資源管理(Resource Management)C++
- 《Effective C++》第三版-4. 設計與宣告(Design and Declarations)C++
- 《Effective C++》閱讀總結(二):類的構造、析構和賦值C++賦值
- 【C++】C++基礎知識C++
- 【C++】C++之Lambda表示式C++
- C++C++
- [C++之旅] 7 C++類和物件C++物件
- 【C++】C++的位元組對齊C++
- 【C++】 C++知識點總結C++
- 【C++】C++之型別轉換C++型別
- 【C++】 C++異常捕捉和處理C++
- C++學習筆記——C++ 繼承C++筆記繼承
- C++學習筆記-Cherno C++系列C++筆記
- 【C/C++】 C++暫存器優化C++優化
- 《Effective C++》第三版-2. 構造析構賦值運算(Constructors,Destructors,and Assignment Operators)C++賦值Struct
- C++圖C++
- C++——模板C++
- C++ 物件C++物件
- c++ mutableC++
- C++ pointerC++
- C++ 引用C++
- C++ bitsetC++