C 學習筆記之函式理解

2021-10-04 18:13:04 字數 2339 閱讀 7041

c++中推薦使用內聯函式替代c中巨集**片段,使用inline關鍵字宣告內聯函式,。

c中巨集**片段。

#define void fun(a,b) (a < b ? a : (b))
c++中內聯函式時關鍵字inline必須和函式定義結合在一起,否則編譯器會直接忽略內聯請求。

inline void fun_inline()和實現寫在一起,不用宣告函式。

inline

void

fun_inline()

內聯函式在最終生成的**中沒有定義,編譯器會直接將內聯函式體替換到呼叫的地方。所以內聯函式沒有壓棧出棧,效率會高一些。

如下面**,main函式中呼叫內聯函式fun_inline,最終生成的**就是機械的把fun_inline替換成實現。

inline

void

fun_inline()

intmain()

system

("pause");

return0;

}

c++編譯器不一定准許函式的內聯請求

內聯函式是一種對編譯器的請求,因此編譯器可能拒絕該請求,如果拒絕了內聯請求,那麼內聯函式就跟普通函式沒有區別。內聯函式由編譯器處理,直接將編譯後的函式體插入到呼叫的地方。巨集**片段是由預處理處理的,進行簡單的文字替換,沒有任何編譯過程。

c++編譯器能夠進行編譯優化,就算函式不是內聯函式,也可能被編譯成內聯函式。

函式引數賦乙個預設值,若呼叫函式時沒有引數就是用預設值,若呼叫函式有引數時就不適用預設值。

void

fun(

int x =10)

intmain()

預設引數規則:如果函式有預設引數和非預設引數,那麼所有的預設引數應都位於非預設引數之後。

//inline void fun(int x = 10, int y)//非法語句,預設引數應該在最後

inline

void

fun(

int y,

int x =10)

函式呼叫必須寫夠引數

void

fun(

int x,

int)

intmain()

可以預設引數和佔位引數結合使用。這樣做主要是為以後的程式擴充套件用

void

fun(

int x,

int=0)

intmain()

用乙個函式名定義不同的函式。

函式過載至少滿足下面乙個條件:

void

fun(

int x)

void

fun(

int x,

int y)

void

fun(

double x)

void

fun(

double x,

int y)

函式的返回值不是過載的判斷標準。

void

fun(

int x)

//報錯,「int fun(int)」: 過載函式與「void fun(int)」只是在返回型別上不同

intfun

(int x)

預設函式和過載函式組合,有可能存在二義性,c++編譯器不允許這麼操作。

void

fun(

int x)

void

fun(

int x,

int y =0)

intmain()

//宣告乙個函式型別

typedef

void

(mtypefun)

(char

* x)

;mtypefun* fun =

null

;//宣告乙個函式指標型別

typedef

void

(*mptypefun)

(int x)

;mptypefun pfun =

null

;//宣告乙個函式指標變數型別

void

(*mvarfun)

(int x,

int y)

;

C 建構函式理解

正確理解qt中建構函式 widget widget qwidget parent qwidget parent ui new ui widget include using namespace std class base base int val m num val 1 private int m...

機器學習核函式理解

核函式要滿足的條件稱為mercer s condition。核函式的作用就是隱含著乙個從低維空間到高維空間的對映,而這個對映可以把低維空間中線性不可分的兩類點變成線性可分的。在機器學習中常用的核函式,一般有這麼幾類,也就是libsvm中自帶的這幾類 1 線性 k v 1,v 2 v 1,v 2 2 ...

lua學習 lua函式理解

詞法定界指 巢狀的函式可以訪問他外部函式中的變數。第一類值指 可以被存放在變數中,也可以存放在表中,可以作為函式的引數,還可以作為函式的返回值。的值function foo x return 2 x end這段 實際上就等效於 foo function x return 2 x end所以實際上lu...