1. c++的內聯函式
它的存在目的就是在編譯時就將函式全部複製到要使用的地方,稍微優化了時間
而它又是按值傳遞,所以區別於普通的巨集函式
使用該特性必須在 內聯函式宣告或者函式定義前加上關鍵字 inline
可以當作常規函式呼叫
例如:inline
double square (double x)
內聯函式不能遞迴!**過長等會被視為常規函式
2. 引用變數 (c++新增的復合型別)
引用是已定義的變數的別名,可對該變數直接操作
注意的是宣告引用時必須將其初始化
引用方法 例如:
int & rodnets = rats;
於函式傳遞中使用,避免了指標出錯問題
若函式是引用的 那麼宣告\定義 為 stuats function(stuats & a,...)
而在使用的地方與按值傳遞無差別
對引用加 const : const
int &a = b;
將引用用於結構體和類的傳遞
3. 函式返回引用:
例如 結構體 structp
函式 structp & funx(structp & target)
stuats funy(structp & target)
返回structp &,那麼funx返回的引用便是實際的元素,
如果只是返回 structp 型別,那麼返回的是乙個副本
這使得 funy(funx(team)) 這樣的函式呼叫出現差別:對於前者funy可改變原資料
//結構體可以直接賦值
而對於 structp & funx(structp & target)
使用時可以 funx(team) = (structp) other 因為返回的是乙個引用,可被賦值
注! 返回的往往是作為引數傳遞給函式的引用(可以是隱式的),因為函式結束
會將原本屬於函式內的元素釋放
當然用 new 申請的也可作為返回物件,要注意的是使用完後需要 delete
對於返回的引用可以使用 const 進行修飾
4. 將引用用於類物件
與引用結構體相似
而形參為 string ,實參可以為 char *,因為c++內有 char *到 string 的轉換功能
5. 物件、繼承和引用 (見第13和17章筆記)
6. 預設引數
預設引數指的是當函式呼叫中省略了實參時自動使用的乙個值
例如:void cal(int n)
如果把 n 設定為預設值 1 ,那麼直接用 cal() 就相當於 cal(1)
設定預設值的方法
在函式原型中,必須自右相左的新增預設值
例如:int harpo(int n=1,int m=4,int j=5); //valid
使用時可以部分預設(或全預設) harpo(2); //valid
但是實參必須自左向右的賦給形參,不能跳過
harpo(2,,2) //invalid
int chico(int n=1,int m,int j=9); //invalid
7. 函式過載(函式多型)[通過編譯器的名稱修飾來區分]
使得可以使用多個重名的函式,使得他們使用不同的引數列表完成相同的工作
函式的引數列表又稱為函式特徵標
如果兩個函式的引數數目和型別相同,同時引數的排列順序也相同,則它們的特徵標相同
注意不要出現 double cube(double x);
double cube(double &x);
因為使用cube(n)時會出現兩個都匹配的情況
匹配函式時,不區分是否為 const 變數
注意:函式返回型別可以不同,但是特徵標必須不同!
函式過載中可以使用預設引數
8. 函式模板
函式模板允許以任意型別的方式來定義函式
必須關鍵字 template 、 typename(可以用 class 為舊式的)
格式例如:
template
--> anytype 為任意型別名
void swap(anytype &a,anytype &b)
模板本身不建立任何函式,但是它會指定編譯器去定義函式
9. 過載的模板
要求被過載的模板的函式特徵標必須不同,其他的和常規函式過載類似
10. 模板的顯示具體化和例項化
具體化:
目的是使其能夠用於特定的結構或類(另一種方法是為它們過載運算子)
當編譯器找到與函式呼叫匹配的具體化定義時,會使用該定義而不找模板
iso/ansi c++98 標準:
a. 對於給定的函式名,可以有非模板函式、模板函式、
顯式具體化模板函式和它們的過載版本
b. 顯示具體化的原型和定義應以template
<>打頭,並通過
名稱來支援型別
格式例如:
template
<> void swap(job &,job &);
c. 優先順序: 非模板函式 > 具體化 > 模板函式
例如:void swap(job &,job &);
template
void swap(t &,t &);
template
<> void swap(job &,job &);
可等價簡化為 template
<> void swap(job &,job &);
例項化:
隱式,就是當執行時,遇到型別時生成使用
顯式例項化,在編譯時就要求編譯出該型別的函式
差別在於,具體化的函式是自己編寫的,而顯式例項化,給出命令讓編譯器實現就可以了
格式例如:
template
void swap(int,int); //template 後沒有 <>
11. 函式模板的發展
a. c++11 關鍵字 decltype
使用該關鍵字 decltype(x+y) z; 相當於宣告了乙個 和 x+y 型別相同的變數 z
b. c++11 後置返回型別
針對了模板函式的返回型別不確定情況
結合關鍵字 auto
於是格式 :
template
auto fun(t1 x,t2 y) -> decltype(x+y)
WaitForSingleObject函式的使用
程式舉例 1 建立對話方塊應用程式,專案名稱為mytestthread 2 新增按鈕,命名為啟動和停止,在對話方塊中增加編輯框,id為idc time,3 增加成員變數,handle m hthread 2 此為執行緒的控制代碼 4 定義全域性變數,用來控制線程的執行與否 volatile bool...
cvCreateVideoWriter函式使用
cvcreatevideowriter函式使用 2011 11 04 15 47 例如,cv fourcc p i m 1 是mpeg 1 codec,cv fourcc m j p g 是motion jpeg codec cv fourcc m p 4 2 mpeg 4.2 codec cv f...
CentimetersToPoints函式出錯
在word開發中,碰到centimeterstopoints函式呼叫出錯,提示未指定的錯誤的問題。解決辦法為修改centimeterstopoint函式 匯入msword.olb後的centimeterstopoint函式如下 修改後的centimeterstopoint函式如下,紅色表示的部分為增...