1、inline內聯函式和普通函式的區別:
(1)inline函式沒有普通函式標準的棧幀開闢和回退過程,效率高。
(2)inline在編譯階段處理,可寫在標頭檔案中或呼叫點前。
(3)i
nline只在release版本中起作用。在debug中和普通函式無異。
(4)用inline修飾的函式最後由編譯器決定是否處理成內聯,如遞迴函式等式就不能被處理為inline。
(5)inline在函式呼叫點把函式**展開從而不產生函式呼叫的開銷,不產生函式符號,所以其他檔案不可訪問該函式。
(inline需要加在函式定義前。類中定義的函式都是內聯的 )
2、函式過載問題:
(1)c語言的函式符號生成只
和函式名字有關
。(2)c++函式符號的生成,和
函式名及
引數列表
有關。(3)
c++中函式名同,引數列表不同,稱為過載。
(4)要
過載的函式必須處
在同一作用域
。(5)
被const
和volatile
修飾的非指標
和非引用
形參不能構成過載
。3、const的使用:
(1)const type m;限定m不可變。
1)const在前面
const int n; //n是const
const char *p; //*p是const, p可變
const char* const p
2; //p
2和*p
2都是const
2)const在後面
int const
m; //
m是const
char const * p
3; //*p
3是const, p3可變
char* const p
4; //p
4是const,*p4可變
char const* const p
5; //p
5和*p
5都是const
(2)c中const
可初始化一次,之後不可被修改,是
常變數,可被指標修改,不可定義陣列長度。
(3)c++中const
必須初始化
,不可修改,是
常量,可被指標修改,可用來定義陣列長度。
(4)c++中在編譯時用const修飾的量會被
替換成初始值
。若初始時賦的變數,則會它變成常變數。
3、引用:
(1)可看做更安全的指標。int &b = a;給a取別名為b,修改b就是修改a。
(2)引用自帶解引用,可以訪問引用的記憶體。引用不參與型別。
(3)引用必須初始化
,之後不可指向其他變數(不能重複引用)。
(4)引用的量必須可定址。
(5)引用
無法定址的常量
(如10或者暫存器內的)必須
用const引用
(如const int &a=10產生乙個
臨時量:tmp=10,再對tmp引用)
(6)引用常量用常引用(如位址)。
內建型別
產生的臨時量是常量
(返回值在暫存器內無法定址)。
自定義型別
(class,struct)產生的
臨時量是變數
(返回值可指標、引用操作)。這裡需要注意的一點是:如果自定義型別是隱式轉換產生的臨時量是常量。
1)a+++++b//根據貪吃法,分成a++ ++ +b這個表示式error。因為a++返回給臨時量,他是常量。 2)
++a+++b//++ a++ +b這個表示式error因為首先執行a++。 3)
cout<<(++a)+(++a)+(++a); →++a;++a;++a;cout<++a返回給臨時量
4)cout<<(a++)+(a++)+(a++); →cout下面是指標和引用的應用:
int main()
程式設計記錄貼 C 篇
原因 c 更新,撇棄或優化了原先不安全一些的語法 函式,舊 會報 unsafe,須用其他更安全語法的代替了 解決方案 方法一 在程式最前面加 define crt secure no deprecate 方法二 在程式最前面加 define crt secure no warnings 方法三 在程...
複習貼 Java基礎筆記 1
1.判斷float在後面要加f。如果是小數,需要加f,不是小數,預設往下轉換不會報錯。但是double不能轉換成float,從上往下轉,為強轉型別 2.物件是存在棧中,引用的位址存在堆中 3.棧就是先進先出的桶,堆就是二叉樹 4.int 無法轉為封裝型別double 如 double d 3 會報錯...
git 命令記錄貼
記錄下最近使用git的場景。問題 1 將乙個完整的專案發布到已建立好的git位址 碼雲 執行步奏 1 配置自己的公鑰 2 檢查是否連線成功 ssh t git git.oschina.net welcome to git osc,張輝 3 初始化專案資料夾 git init 4 同步線上版本庫 gi...