布爾類型、操作符別名、C++函數、動態記憶體分配(new\delete)、引用(day02)

來源:互聯網
上載者:User

標籤:傳回值   定義   size   分配   調用次數   foo   logs   ref   操作符   

六 C++的布爾類型1 bool類型是C++中基本類型,專門表示邏輯值:true/false2 bool在記憶體上佔一個位元組:1表示true,0表示false3 bool類型可以接收任意類型和運算式的結果,其值非0則為true,值為0則為false七 操作符別名(瞭解)&&  --》 and||  --》 or{   --》 <%}   --》 %>...八 C++函數1 函數重載strcpy(char*,const char*)strcpy(char*,const char*,int)1)定義  在相同的範圍,定義同名的函數,但是它們的參數表必須有所區分,這樣的函數構成重載關係。  註:重載和返回傳回型別無關2)函數重載匹配  調用重載關係函數函數,編譯器根據實參與形參匹配程度,自動選擇最優的重載版本。  當前編譯器的匹配原則 g++ V4.8.1:  完全符合>常量轉換>升級轉換>降級轉換>省略符號匹配3)函數重載原理  C++編譯器通過函數換名,將參數表的資訊整合到新的函數名中,實現解決函數重載與名字衝突的矛盾eg:  代碼裡面寫的函數:  void func(int i,double d);  void func(int i);  編譯之後函數名將改變:  func(int,double)-->_Z4funcid  func(int)-->_Z4funci    筆試題:函式宣告中加入extern "C"作用?  要求C++編譯器不會函數做換名,便於C程式調用該函數。  文法:  extern "C" void func(..){..}  ----------------------------  extern "C"{      void func1(){}      void func2(){}  }-------2 函數的預設參數(預設實參)1)可以為函數的部分參數和全部參數指定預設值,調用該函數,如果不給實參,就取預設值作為相應的形參值。eg:  void func(int a,int b,int flag=0){..}  int main(void){      func(10,20,1);      func(10,20);  }2)預設參數必須靠右,如果一個參數有預設值,那麼這個參數的右側所有參數都必須帶有預設值。3)如果函數的定義和聲明分開,預設參數應該寫在函數的聲明部分,而定義部分不寫。void func(){..} -->函數的定義void func();    -->函數的聲明3 函數的啞元參數1)定義:只有類型而沒有變數名的形參稱為啞元eg: void func(int a,int/*啞元*/){}2)使用啞元的情境--》為了相容舊代碼演算法庫:     void math_func(int a,int b){...}使用者:    int main(void){        math_func(10,20);        ...        math_func(20,30);    }------------------------------------升級演算法庫:     void math_func(int a,int=0){...}--》操作符重載時,區分前後++/--(後面講)4 內嵌函式(inline)//筆試題:inline關鍵字的作用1)定義  使用inline關鍵修飾的函數,表示這個函數是內嵌函式,編譯器將嘗試做內聯最佳化,避免函數調用的開銷,提高代碼的執行的效率。2)適用情境--》多次調用的小而簡單的函數適合內聯--》調用次數極少擷取大而複雜的函數不適合內聯--》遞迴函式不適合內聯註:內聯只是一種建議而不是強制要求,能否內聯主要取決於編譯器,有些函數不加inline關鍵字修改也會被預設處理為內聯,有些函數即便加了inline關鍵字也會被編譯器忽略。---------------------筆試題:1)程式碼片段1for(int i=0;i<100000;i++)   for(int j=0;j<100;j++)      ... 2)程式碼片段2for(int i=0;i<100;i++)   for(int j=0;j<100000;j++)      ...---------------------九 C++的動態記憶體分配//筆試題:C++中new/delete和C中malloc和free區別1 回顧C中動態分配1)分配:malloc()2)釋放:free()3)錯誤:傳回值eg:  int* p = (int*)malloc(sizeof(int));  *p = 100;  free(p);//避免泄露  p = NULL;//避免使用野指標2 C++使用運算子分配動態記憶體1)分配:new、new[]2)釋放:delete、delete[]3)錯誤處理:異常(後面講)eg:   //int* p = new int;//分配不初始化   //*p = 100;   int* p = new int(100);//分配同時初始化   delete p;   p = NULL;   -----------------   int* parr = new int[10];//分配數組   parr[0]=10;   parr[1]=20;   ...   delete[] parr;   parr = NULL;--------------------------十 C++的引用(Reference)1 定義1)引用就是某個變數的別名,對引用的操作與對該變數的操作完全相同。2)文法規則 類型& 引用名 = 變數名; 註:引用在定義時必須初始化,而且初始化以後不能修改引用的目標。 註:參考型別和它所綁定的目標變數類型要一致 eg: int a = 10; int& b = a;//b就是a的別名 b++; cout << a << endl;//11 int c = 20; b = c;//將c的值賦值給b(a) cout << a << endl;//20 2 常引用1)定義引用時加const修飾,即為常引用,不能通過常引用修改引用的目標。  const 類型& 引用名 = 變數名;eg:  int a = 10;  const int& b = a;//b就是a的常引用  b = 200;//error2)普通的引用只能引用左值,而常引用也叫做萬能引用,既能引用左值,也能引用右值。==================註:關於左值和右值1)左值:可以放在賦值運算子的左側-->普通變數都是左值-->前++/--運算式結果是左值-->賦值運算式的結果是左值eg:  int a = 1;  ++a = 20;//ok  cout << a << endl;//20  ++++++a;  cout << a << endl;//23eg:  int a = 3,b = 5;  int c = 0;  (c = a) = b;//ok  cout << c << endl;//52)右值:只能放在賦值運算子右側--》字面值常量--》大多數運算式的值eg:  int a = 3,b = 5;  (a + b) = 10;//error,a+b的結果是右值  --》函數傳回值eg:  int foo(void){      int a = 100;      return a;//分配臨時變數=a  }  int main(void)  {      int res = foo();//函數調用結果是臨時變數      cout << res << endl;//100      int& r = foo();//error      const int& cr = foo();      return 0;  }

 

布爾類型、操作符別名、C++函數、動態記憶體分配(new\delete)、引用(day02)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.