缺省值
提高程序易用性,避免每次調用函數參數都相同的情況。
缺省值只能出現在函數聲明中,不能在函數定義中。
兩個原因:
一是函數的實現(定義)本來就與參數是否有缺省值無關,所以沒有必要讓缺省值出現在函數的定義體中。
二是參數的缺省值可能會改動,顯然修改函數的聲明比修改函數的定義要方便。
規則:參數從后向前缺省
正確的示例如下:
void Foo(int x, int y=0, int z=0);
錯誤的示例如下:
void Foo(int x=0, int y, int z=0);
但要避免二義性
運算符重載及其規則
運算符即可定義為成員函數,也可定義為全局函數。
規則如下:
運算符 |
規則 |
所有的一元運算符 |
建議重載為成員函數 |
= () [] -> |
只能重載為成員函數 |
+= -= /= *= &= |= ~= %= >>= <<= |
建議重載為成員函數 |
所有其它運算符 |
建議重載為全局函數 |
不能重載的運算符
(1)不能改變C++內部數據類型(如int,float等)的運算符。
(2)不能重載‘.’,因為‘.’在類中對任何成員都有意義,已經成為標準用法。
(3)不能重載目前C++運算符集合中沒有的符號,如#,@,$等。原因有兩點,一是難以理解,二是難以確定優先級。
(4)對已經存在的運算符進行重載時,不能改變優先級規則,否則將引起混亂。
函數內聯
目的:提高執行效率。
宏
Q為什么要用?
A提高執行效率。
Q如何提高?
A宏代碼本身不是函數,但使用起來象函數。預處理器用復制宏代碼的方式代替函數調用,省去了參數壓棧、生成匯編語言的CALL調用、返回參數、執行return等過程,從而提高了速度。
Q缺點?
使用宏代碼最大的缺點是容易出錯,預處理器在復制宏代碼時常常產生意想不到的邊際效應。
例如:
#define MAX(a, b) (a) > (b) ? (a) : (b)
語句
result = MAX(i, j) + 2 ;
將被預處理器解釋為
result = (i) > (j) ? (i) : (j) + 2 ;
由于運算符‘+’比運算符‘:’的優先級高,所以上述語句并不等價于期望的
result = ( (i) > (j) ? (i) : (j) ) + 2 ;
如果把宏代碼改寫為
#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
則可以解決由優先級引起的錯誤。但是即使使用修改后的宏代碼也不是萬無一失的,例如語句result = MAX(i++, j);
將被預處理器解釋為
result = (i++) > (j) ? (i++) : (j);
對于C++ 而言,使用宏代碼還有另一種缺點:無法操作類的私有數據成員。
posted @ 2007-08-13 10:21 寶杉 閱讀(214) | 評論 (0) | 編輯 收藏