C++11 笔记
5.重載運算符
本質上是一個函數。
函數名為operator(+-*/……)
如果一個運算符是成員函數,其左側運算對象就綁定到隱式的this參數上。
?
a.拷貝賦值運算符
例如:
1 class Foo { 2 public: 3 Foo& operator=( const Foo& ); 4 }注意,賦值運算符通常返回一個指向其左側運算對象的引用。(這樣就可以在一個表達式中連續使用=)
若類內未定義,編譯器會合成一個拷貝賦值運算符。
它會將右側運算對象的每個非static成員賦予左側運算對象的對應成員。
b.……運算符
?
?
4.初始化
1 int i = 0; 2 int i = {0}; 3 int i{0}; 4 int i(0);
注意下面這種初始化寫法是錯誤的。
int i = (0);
默認初始化:
定義于任何函數體之外的內置類型變量會被初始化為0,函數體內不被初始化。
直接初始化
容器的emplace成員創建的元素都進行直接初始化
拷貝初始化
容器的insert或push成員創建元素進行拷貝初始化
?
3.關鍵字
? ? ?explicit: ? ? 抑制構造函數定義的隱式轉換。所以,explicit構造函數只能用于直接初始化。
1 explicit Sales_data(const std::string &s):bookNo(s) {} 2 3 Sales_data item1(null_book); //可以進行直接初始化 4 5 Sales_data item2 = null_book; // 不能用于拷貝形式的初始化,因為不允許string 到 Sales_data的隱式的轉換?對了,這個關鍵字只能在類內聲明構造函數的時候使用。
?
2. ?默認構造函數:參數列表位空的構造函數
? ? ?拷貝構造函數:第一個參數是自身類類型的引用,且任何額外參數都有默認值的構造函數。
所以這個參數還必須是引用類型,因為若是非引用類型就需要對參數進行拷貝初始化,然后調用自身導致無限循環
? ? ?移動構造函數:
?
1. 用auto作為函數的返回值?
不能直接使用auto的替換原來的返回類型。
但是可以在函數尾置返回類型中使用, 將auto放在函數名之前,與尾置返回類型配合指明函數的返回類型
1 auto fun() -> int{ 2 3 return 3; 4 }?
轉載于:https://www.cnblogs.com/Agravity/p/6131033.html
總結
- 上一篇: 信息安全-5:RSA算法详解(已编程实现
- 下一篇: 《C++ Primer Plus(第六版