C 擴充套件 函式

2021-10-12 11:10:24 字數 2953 閱讀 9399

1.函式的分檔案編寫:

可以將函式定義在標頭檔案(字尾為.h)中,然後進行檔案包含(參見 c語言細節.預處理器.三 部分)或編譯多原始碼檔案(參見 c語言細節.多原始碼檔案程式

的編譯,命令列引數,退出程式 部分)

2.函式的預設引數

(1)語法:

([,

...=..

.])//注意:有預設值的引數必須放在最後(其右側不能有沒有預設值的引數)

//引數說明:其他引數同 c語言基礎.函式.二.1 部分

val:指定相應引數的預設值

//例項:

#include

using

namespace std;

intf

(int i2,

int i1 =1)

intmain()

(2)函式宣告與預設引數:

不能同時在函式宣告和函式定義中指定預設引數,即使2次指定的是相同的值:

#include

using

namespace std;

intf

(int i1,

int i2 =1)

;int

main()

intf

(int i1,

int i2/* = 1*/

)//報錯:

//[error] default argument given for parameter 2 of 'int f(int, int)' [-fpermissive]

//結果:

101202

3.函式的佔位引數

(1)函式的佔位引數:

定義函式時如果只指定了某形參的資料型別,而沒有指定其變數名,就指定了1個佔位引數:

([..

.])//注意:在呼叫函式時,也需要給佔位引數傳值

//例項:

#include

using

namespace std;

voidf(

int i1,

int)

intmain()

//報錯:

//[error] too few arguments to function 'void f(int, int)'

//結果:

this is a function

(2)佔位引數的預設引數:

([=

...]

)//例項:

#include

using

namespace std;

voidf(

int i1,

int=10)

intmain()

//結果:

this is a function

4.函式過載

(1)用法:

c++支援"函式過載"

,即在1個作用域中定義多個同名函式.這些函式滿足下述要求:

①在同1個作用域內

②函式名相同

③引數必須不同

區別可以是引數的資料型別/引數的個數不同/不同型別間的順序

不能僅有形參名的區別

④函式體/返回值的資料型別可以不同,也可以相同,不能作為過載條件

呼叫時將根據傳入的引數決定究竟呼叫哪個函式;或者說,函式引數是"過載條件"

//例項:

#include

using

namespace std;

voidf(

int i)

voidf(

float i)

intf

(double i)

//void f(int i, int j)

////void f(int j, int i)

intmain()

//報錯:

//[error] redefinition of 'void f(int, int)'

//結果:

intfloat

double

0

(2)引用作為過載條件:

只有在引用作為引數時,

const等型別限定符才能作為過載條件:

#include

using

namespace std;

voidf(

const

int& i)

voidf(

int& i)

intmain()

//結果:

intconst

intconst

int

(3)函式過載與預設引數:

當函式有預設引數時,函式過載在呼叫時可能出現二義性:

#include

using

namespace std;

voidf(

int i,

int j =1)

voidf(

int i)

intmain()

//報錯:

//[error] call of overloaded 'f(int)' is ambiguous

//結果:

end

5.匿名函式:

參見:

c++

11提供了對匿名函式的支援,稱為"lambda函式"或"lambda表示式"

.lambda表示式可以被像物件一樣使用,如被賦給變數;也可以被像函式一樣

求值.具體形式如下:(..

.)->

//引數說明:

capture:

type,param:分別指定引數的資料型別和引數名

rtype:指定返回值的資料型別

body:指定函式體

C 函式引數的擴充套件

1 函式引數的預設值 c 中可以在函式宣告時為引數提供乙個預設值,當函式呼叫時沒有提供引數的址,則使用預設值 int mul int x 0 int main int argc,char ar int mul int x 引數的預設值必須在函式宣告中指定 問題 函式定義中是否可以出現引數的預設值?當...

C 基礎 函式引數擴充套件

c 中可以在函式宣告時為引數提供乙個預設值,當函式呼叫時沒有指定這個引數的值,編譯器會自動用預設值代替。include using namespace std void myprint int x 3 void myprint2 int x 3,int y 4 void myprint2 int x...

C 對C的函式擴充套件 inline內聯函式

1 c 中的const常量可以替代巨集常數定義,如 const int a 3 define a 3 2 c 中是否有解決方案替代巨集 片段呢?替代巨集 片段就可以避免巨集的 c 中推薦使用內聯函式替代巨集 片段 c 中使用inline關鍵字宣告內聯函式 說明1 inline 必須和函式體的實現,寫...