C 函式引數的擴充套件

2021-09-13 12:51:44 字數 2302 閱讀 5538

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 ...