函數聲明的時候,參數可以沒有標識符:
void f(int x, int = 0, float = 1.1);//函數f聲明
其實,在C++中,函數定義的時候,也不一定需要標識符:
void f(int x, int , float flt){/*...*/}//函數f的定義
沒有參數名,有一定的特殊之處,那就是中間的這個參數值是不能再函數體中引用的,但調用的時候還必須提供一個展位符。
因此f的調用方式,可以是f(1)或者f(1,2,3.0).
第一種調用利用了默認參數的性質。第二種調用2必須給,當做佔位符。
那麼展位符的作用是什麼呢?
目的就在於:以後可以修改函數的定義而不需要修改所有函數的調用。
例如:如果開始使用一個函數參數,後來發現這個函數參數沒有用處,可以將它直接去掉而不會產生錯誤警告,而且不需要改動那些調用該函數以前版本的程序代碼。
體驗:
int example(int x, int , int z)
{
return x + z;
}//定義
int sum = example(1,2,3);
當然函數定義中有一個名字y,int example(int x, int y, int z),而不使用y也可以達到同樣的效果,但這樣因爲
函數體中沒有使用它,多數編譯器都會給出一個警告,並認爲犯了一個邏輯錯誤。
用這種沒有名字的參數,我們可以防止警告,並可以展現我們的意圖。
因此下次修改函數定義的時候,如果一個參數不想用了,可以直接刪除名字就可以了,而不用再重新寫個函數聲明。