c++ learning blog (1)

1, typedef 名字typedef機制爲我們提供了一種很好的類型定義機制,對於程序忠一些不易懂的程序類型,通過typedef的定義增加程序的可讀性!典型的兩個用例是:1)增強複雜模板的可讀性 
                             2)使得指向函數的指針,類型易讀
示例:typedef double pe;typedef vector<int> vec_int;
 typedef int (*compare)(const int &a, const int &b);compare arr[10]; 
易錯點: 對於下面的聲明
typedef char *cstring;const cstring m; // 是個指針常量 即: char * const m; 而不是常量指針!!

2, C++中函數的傳參;在默認的情況下函數的參數傳遞與 返回值傳遞都是拷貝傳遞,也就是說我們操縱的並非是那些參數本身而是他的拷貝,這顯然出現了三種不方便:1)如果我們需要改變參數的值的時候 2)這個參數是個很大的成員。也就是說拷貝浪費太多時間;3)需要帶回來出返回值外的額外結果!
 解決方法:傳進指針或者引用;兩者之間的區別:
1)指針很顯然傳進來的是個指針(地址),而引用則是對象,這使得在一些程序中爲了程序的易讀性而採取引用的方式,EG: 重載操作符就往往是引用傳遞。
2)引用必然指向一個對象,而指針則不然,他可以指也可以不指,這個差別使得在一些情況下用指針比用引用來得好!
對於不想修改參數值的可以適當的加上CONST關鍵字來解決。
對於希望修改一個指針的參數值,可以聲明一個指針的引用: int  *&m; //只修改指針本身而不是指針所對應的值。

數組參數傳遞是指針,代表他首元素的地址;而且數組參數的傳遞中默認情況下並進行數組長度的檢查。對於這個問題解決的方法:1)增加一個長度參數; 2)傳引用

省略號:參數列表中 ...省略號-->掛起類型檢查 也就是說這邊可以有0到多個未知的類型。
注意! int putValue();
          int putValue(...); 這兩個函數不相同!
3,函數返回值
在返回引用值的時候應該注意的是:
1)局部對象的生命期問題,不能引用一個局部對象. (當然對於在程序中各個模塊之間通訊的方法:全局變量還是參數,返回值中首選後者,因爲前者如果過多會衍生很多的問題讓程序不易拓展!)
2)返回一個引用,對返回值的任何修改都將改變被返回的實際對象。
eg:int  &getValue();
         main(){
             getValue()++// 返回的值也被修改!!
        }
4,指向函數的指針;
函數的類型不由函數名決定!
普通的函數調用實際上就是指針的調用;函數的入口地址。
int (*compare)(int a,int b); //注意與 返回指針的函數寫法上的區別!

對於函數指針的賦值,顯然是通過同類型的函數指針來賦值。
調用是與普通函數調用類似。
int m=compare(1,2);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章