C++ Primer總結

一、若是反斜槓\後面跟着的八進制數字超過3個,只有前3個數字與\構成轉義序列。例如\123app

二、一樣的\x要用到後面跟着的全部數字。\x12346213函數

三、變量只能定義一次,可是能夠被屢次聲明。this

四、指針和引用的區別:spa

  1)引用是另外一個對象的別名,而指針自己就是一個對象。指針

  2)引用必須初始化,而且一旦定義了引用就沒法再綁定到其餘對象。而指針無須在定義時賦初值,也能夠從新賦值讓其指向其餘對象。對象

五、getline(cin, word)函數遇到空格符不會中止,輸入一行數據,即遇到換行符結束,字符串word不包括換行符。ci

六、string a("hello");  for (auto &c, str);  意思是循環遍歷字符串a的每一個字符。存儲在c中,自動初始化爲下一個字符。作用域

七、vector和string對象的下標運算符可用於訪問已存在的元素,而不能用於添加元素。字符串

八、int   &val  =  10;  (錯誤,引用只能綁定在對象上,而不能與某個字面值或表達式的計算結果綁定在一塊兒)get

   const   int  val = 10;  (正確,容許一個常量引用綁定很是量對象、字面值、甚至是個通常表達式) 

九、重複聲明例子(錯誤):

        Record lookup(Phone a)                               

        Record lookup(const Phone a)                            

 

        Record lookup(Phone *a)  

        Record lookup(const Phone a)   

        

        Record lookup(Phone &a)

        Bool lookup(const Phone a)

  對於接受指針或引用的函數來講,對象是很是量仍是常量對應的形參不一樣。(構成重載)

        Record lookup(Account &a) 

        Record lookup(const Account &a)      

 

        Record lookup(Account *a)

        Record lookup(const Account *a)

十、聲明函數時,一旦某個形參被賦予了默認值,那麼它以後的形參都必需要有默認值。

十一、局部變量不能做爲默認實參。(static靜態數據成員一樣不能做爲默認實參)

  sz   wd  =  80;    char  def  =  '  ';        sz =  ht();

  string   screen(sz  =  ht();   sz =  wd;    char  =  def);

  void   f2()

  {

    def  =  '*';         //改變了默認實參的值

    sz   wd  =  100;       //隱藏了外部定義的wd,可是沒有改變默認值,由於是新建立的局部變量,沒法改變默認值。

    window   =  screen();    //調用screen(ht(),   80,  '*')

  } 

十二、封裝的優勢:

  一、確保用戶代碼不會無心間破壞封裝對象的狀態。

  二、被封裝的類的具體實現細節能夠隨時改變,而無需調整用戶級別的代碼。

1三、一個const成員函數若是以引用的形式返回*this,那麼它的返回類型將是常量引用。

1四、關聯容器(與順序容器的本質區別在於:關聯容器是經過鍵(key)存儲和讀取元素的,而順序容器則經過元素在容器中的位置順序存儲和訪問元素。 

1五、在順序容器中能夠用c.front()和c.back()分別以返回引用的形式訪問容器的頭元素和尾元素。(注意使用前須要檢驗容器是否爲空,即 !c.empty())。

1六、若是往容器中調用insert(給定位置begin,值vec)函數,會在begin的位置以前插入值vec,並返回新增值位置。

  而erase()函數則是返回擦除元素的下一位迭代器。

1七、s.substr(pos, n)返回一個string,包含s中從pos開始的n個字符的拷貝。

  s.append("good")將「good」追加到字符串末尾。

  s.replace(pos, n,  「good」)把字符串s中的pos位置開始的3個字符替換成候選字符串「good」。

1八、拷貝初始化發生的條件:

  a.咱們在使用=號定義變量時。

  b.將一個對象做爲實參傳遞給一個非引用類型的形參

  c.從一個返回類型爲非引用類型的函數返回一個對象

  d.用花括號列表初始化一個聚合類中的成員

  e.初始化標準容器庫或調用其insert()或push_back()函數。

1九、在一個構造函數中,成員的初始化是在函數體執行以前完成的,且按照成員在類中出現的順序進行初始化。

  在一個析構函數中,首先執行函數體,而後銷燬成員。成員按照初始化的順序逆向銷燬。

20、當指向一個對象的引用或指針離開做用域時,析構函數不會執行。

2一、StrblobPtr& operator++();                            前置運算符,返回對象的引用

  StrblobPtr  operator++(int);        後置運算符返回對象的值。(int 用來區別前置和後置運算符)

2二、#define  swap(x,y)\                              swap(x,y)\

      x = x^y;\          (x) = (x) + (y);\

      y = x^y;\             (y) = (x) - (y);\

      x = x^y;            (x) = (x) - (y);

相關文章
相關標籤/搜索