1、函式引數的預設值
c++中可以在函式宣告時為引數提供乙個預設值,當函式呼叫時沒有提供引數的址,則使用預設值
int mul(int x = 0);
int main(int argc, char * ar**)
int mul(int x)
引數的預設值必須在函式宣告中指定
問題:函式定義中是否可以出現引數的預設值?
當函式宣告和定義中的引數預設值不同時會發生什麼?
#include int mul(int x = 0); // 函式宣告的時候提供了預設值
int main(int argc, char *ar**)
//int mul(int x = 5) // 定義的時候再提供乙個預設值
int mul(int x)
// 1、函式宣告的時候提供了預設值 ok
int mul(int x = 0);
int mul(int x)
// 2、函式宣告和定義都提供了預設值,err
int mul(int x = 0);
int mul(int x = 5)
// 3、函式定義時提供預設值,err
int mul(int x);
int mul(int x = 5)
故函式只能在宣告的時候提供預設值,不能在定義的時候提供預設值
函式預設引數的規則
add(0); // x = 0, y使用預設值,則後續引數z必須使用預設值
add(2,3); // x = 2, y = 3,
從右向左考慮,這是針對函式設計來說
從左向右匹配是指函式呼叫來說
#include int add(int x, int y = 0, int z = 0);
// int add(int x, int y = 0, int z); // err
// int add(int x, int z, int y = 0); // ok
int main(int argc, char *ar**)
int add(int x, int y, int z)
2、函式佔位引數
在c++中可以為函式提供佔位引數,佔位引數只有引數型別宣告,而沒有引數名宣告,一般情況下函式體內部無法使用佔位引數
int func(int x, int)
func(1, 2); // ok
佔位引數沒有名字,在函式體內部無法使用
函式佔位引數存在的意義考慮這兩種寫法是否等價?
void func();
void func(void);
// c 不等價
void func(); // 無返回值,引數為任意引數
void func(void); // 無返回值,不接收任何引數
// c++ 等價
void func();
void func(void); // 無返回值,無引數
c++為了相容c語言
// c
void func()
// 在c語言中可以編譯通過
int main(int argc, char * ar**)
// c++中編譯肯定不行,為了快速修改**,不出bug,就用了佔位引數
void func(int, int)
int main(int argc, char * ar**)
// c++, 佔位引數和預設引數值結合起來
void func(int = 0, int = 0)
int main(int argc, char * ar**)
這樣,將c語言移植到c++,**修改非常小,而且安全。
3、小結
c++中支援函式引數的預設值如果函式呼叫時沒有提供引數值,則使用預設值
引數的預設值必須從右向左提供
函式呼叫時使用了預設值,則後續引數必須使用預設值
c++中支援佔位引數,用於相容c語言中的不規範寫法
C 基礎 函式引數擴充套件
c 中可以在函式宣告時為引數提供乙個預設值,當函式呼叫時沒有指定這個引數的值,編譯器會自動用預設值代替。include using namespace std void myprint int x 3 void myprint2 int x 3,int y 4 void myprint2 int x...
函式引數的擴充套件。
1 函式引數的擴充套件。1 函式引數的預設值。1 c 在函式宣告時為函式提供乙個預設的引數值。當函式呼叫沒有引數的值的時候,使用預設引數。void test int x 0 int main void test int x 2 引數預設值必須在函式宣告中指定。3 函式定義中是否可以存在引數的預設值?...
C 函式引數的擴充套件 聽課筆記
一 函式引數的預設值 1 c 中可以在函式宣告時為引數提供乙個預設值 當函式呼叫時沒有提供引數的值,則使用預設值。example int mul int x 0 int main int argc,char argv int mul int x 2 引數的預設值必須在函式宣告中指定question ...