1.操作符優先順序
單目運算子》雙目運算子》移位》大與小
2.移位操作
邏輯移位和算術移位
邏輯移位:針對的是無符號型別的資料
左移:丟棄最高位,低位補0
右移:丟棄最低位,高位補0
算術移位:針對的是有符號型別的資料
左移:丟棄最高位,低位補0
右移:丟棄最低位,如果該數字是正數高位補0,如果是負數高位補1
3.預設引數
(1)概念:在宣告或定義函式時,給函式的引數設定乙個預設值,當使用者對函式進行呼叫時,如果傳遞了實參,則使用使用者傳遞的實參;如果沒有傳遞則使用預設值,例子:備胎
(2)分類:
全預設引數—所有引數都帶有預設值
半預設引數—部分引數帶有預設值–規則:必須從右往左依次給出
(3)特性
~預設引數必須從右往左給出
~不能在函式宣告和定義的位置同時給出
~預設引數在提供時–常量||全域性變數
~c語言不支援
4.函式過載呼叫原理:編譯器在編譯**期間,需要對函式的實參型別進行推演,根據推演的結果選擇對應合適型別的函式進行呼叫。
**注意:**有該函式存在則直接呼叫,如果不存在型別完全匹配的函式,則編譯器會嘗試進行隱式型別轉換,轉換完成後,如果有對應型別的函式則進行呼叫,否則,編譯失敗
(3)底層實現原理
c和c++命名規則
c語言:只是在函式名字前加_,c語言不支援函式過載
c++:例如如下函式中
int
add(
int left,
int right)
在vs下命名規則為?add@@yahhh@z,其中add為函式名,hhh為int型別,nnn為
double型別
(4)extern"c"
在乙個c++工程中呼叫別人採用c語言寫的第三方庫
作用:告訴編譯器,將**按照c語言的風格進行處理
5.引用
(1)概念
引用是乙個別名,不是新定義乙個變數,編譯器不會給引用變數重新分配空間,引用變數與其引用的實體公用同乙份記憶體空間
例子:別名
(2)特性
引用變數在定義時必須要初始化
乙個變數可以有多個引用----乙個人可以有多個別名
引用變數一旦引用乙個實體之後,就不能再去引用其他的實體
(3)三種傳參方式區別
傳值優點:可以對外部實參起到保護作用
缺點:不能通過形參改變外部的實參(因為形參是實參的乙份拷貝,在函式體中修改形參實際修改的是實參的乙份拷貝),傳參的效率低下,而且浪費空間
傳引用:形參是實參的別名—對形參進行修改可以達到對實參的改變,對於不需要通過形參改變外部實參:const,傳參效率高,節省空間,**可讀性高
**注意:**在c++中,一般情況下傳參時盡量使用引用
內建型別:
如果需要通過形參改變外部的實參—優先使用引用
如果不需要通過形參改變外部的實參—傳值,傳引用+const
自定義型別:傳參都使用引用—>t&和const t&
6.指標和引用的區別
實現引用技術:指標方式來實現的
說明:引用和指標在底層實現方式是完全相同的,引用就是按照指標的方式來實現的
從底層實現上看:沒有任何區別
(2)在概念和特性以及使用方式上:
~引用概念上定義乙個變數的別名,指標儲存乙個變數位址
~引用在定義時必須初始化,指標沒有要求
~引用在初始化時引用乙個實體後,就不能再引用其他實體,而指標可以在任何時候指向任何乙個同型別實體
~沒有null引用,但有null指標
~在sizeof中含義不同:引用結果為引用型別的大小,但指標始終是位址空間所佔位元組個數
~引用自加即引用的實體增加1,指標自加即指標向後偏移乙個型別的大小
~有多級指標,但是沒有多級引用
~訪問實體方式不同,指標需要顯式解引用,引用編譯器自己處理
~引用比指標使用起來相對更安全
7.巨集的優缺點
(1)巨集常量
優點:一改全改,常量名字具有一定的含義
缺點:巨集常量沒有型別的—不會參與到型別檢測中—**的安全性降低,而且一旦編譯報錯,報錯的位置不準確
(2)巨集函式
優點:巨集函式不是乙個真正的函式,在預處理階段,預處理器已經將巨集函式採用巨集體進行替換了,少了函式呼叫引數壓棧,開闢棧幀,返回等的開銷了,**的執行效率提高
缺點:~在實現時,可能會比較麻煩,要匯出加括號
~巨集函式也沒有引數型別–不會有引數型別檢測–安全性不高
~巨集函式在預處理階段會展開–不能除錯
~巨集函式具有***
注意:
c++如何解決巨集的缺陷
~巨集常量—const常量:可以達到巨集替換的效果–而且具有型別,更加安全
~巨集函式—內聯函式
內聯函式:在c++中被inline關鍵字修飾的函式稱為內聯函式,如果成員函式在類中定義,編譯器也可能會將其當成內聯函式來處理
特性:在編譯階段,如果編譯器將乙個函式當成是內聯函式的情況下,在編譯**時會對內聯函式進行展開,少了函式呼叫的開銷,程式的執行效果提高了
inline:是乙個建議性的關鍵字,當修飾函式時,建議編譯器將該函式當成內聯函式來進行處理,即:在編譯階段,將該函式展開
inline函式具有檔案作用域
函式過載 引用 內聯函式
預設引數 在定義或者宣告乙個函式的時候,給它的形參賦上乙個預設值,呼叫這個函式的時候,如果沒有把實參傳入,函式就會使用我們指定的預設引數,如果傳入實參,就會使用傳入的引數。預設引數可分為 全預設引數 在這個函式中,給所有的形參都指定了預設值。半預設引數 在這個函式中,只給一部分的形參指定了預設值。注...
C 函式過載 引用 內聯函式
2 函式過載 3 引用 4 內聯函式 在宣告或定義函式時,給函式的引數設定乙個預設值,當使用者對函式進行呼叫時,如果傳遞了實參,則使用使用者傳遞的實參 如果沒有傳遞則使用預設值。預設引數必須從右往左給出 不能在函式宣告和定義的位置同時給出 預設引數在提供時 常量 全域性變數 c語言不支援。相同作用域...
C 命名空間 函式過載 引用 內聯函式
c 關鍵字 c 98 有63個 命名空間解決了 名字衝突,有作用域的作用 命名空間的使用格式 namespace n1使用方法 1.n1 變數 2.using n1 變數 3.using namespace n1 c 的輸入輸出 標頭檔案 iostream 命名空間 using namespace ...