C 學習筆記1

2021-10-09 06:32:18 字數 3931 閱讀 5180

/*函式新特性,內聯函式,const詳解*/

void

func123

(int,int)

;//函式宣告(函式原型)

void func123;//函式定義

// 後置返回型別

auto func123

(int a,int b)

->

void

;//函式宣告

auto func123

(int a,int b)

->

void

//函式定義

// 內聯函式

inline int myfunc

(int testv)

int main()

//二:內聯函式 關鍵字inline

//函式體很小,呼叫很頻繁的這種函式,引入inline(內聯函式)

//(1)inline影響編譯器,在編譯階段對inline這種函式進行處理,系統嘗試將呼叫該函式的動作替換為函式的本體,通過過這種方式提公升效能。

int abc =

myfunc(5

);//int abc = 1;

//(2)inline是我們開發者對編譯器的乙個建議,編譯器可以嘗試去做,也可以不去做,這取決於編譯器的診斷功能,也就是說決定權在編譯器,我們控制不了。

//(3)內聯函式的定義就要放在標頭檔案中。這樣需要用到內聯函式的.cpp檔案都能夠通過include把這個內聯函式的源**include進來,以便找到這個函式的本體源**,並嘗試將函式呼叫替換為函式體內的語句。

//優缺點:

//**膨脹的問題;所以內聯函式函式體盡量要小。

//注意:各種編譯器對inline處理各不相同。inline盡量簡單,**盡可能少。迴圈,分支,遞迴呼叫盡量不要出現在inline函式中。

//否則的化,編譯器很可能會因為你寫的這些**的原因拒絕讓這個函式成為內聯函式。

//constexpr函式,可以看成是更嚴格的內聯函式

//#define巨集展開也類似於inline

constexpr int mf()

//三:函式雜合用法總結

//(1)函式返回型別為void,表示函式不返回任何型別,但是我們可以呼叫乙個返回型別是void的函式,讓它作為另乙個返回型別是void的函式的返回值。

void

funca()

void

funcb()

//(2)函式返回值指標和返回引用的用法

int *

myfunc()

int &

myfunc()

int &k =

myfunc()

;cout <<

&k

k =10

;//向不屬於自己的記憶體寫入值,巨大隱患

int k =

myfunc()

;cout<<

&k

k =10

;//安全的,k的位址是有效的,安全的。

//(3)沒有形參可以保持形參列表為空或者int myfunc(void)

int myfunc

(void

)//(4)如果乙個函式我們如果不帶用的話,則函式可以只有宣告部分,沒有定義部分。

//(5)普通函式定義只能定義一次(定義放在.cpp檔案中),宣告可以宣告多次。一般函式定義.cpp檔案會include自己函式宣告檔案.h

//(6)void func(int &ta,int &tb),在c++中更喜歡用引用型別的形參來取代指標型別的形參。提倡在c++中,多食用引用型別的形參。

struct student//定義乙個結構體

;void

fs(student &stu)

student abc;

abc.num =

100;

fs(abc)

;cout << abc.num

//(7)c++中,函式允許同名,但是形參列表的引數型別或者數量應該有明顯的區別

void

fs(int i)

void

fs(float i)

void

fs(int i,int j)

//四:const char * , char const * ,char * const 三者的區別

const int abc =12;

//abc不可以修改

//char *p; const混用;

char *p;

char str=

"i love china"

;char *p;

//const char *p;//p指向的東西不能通過p來修改(p所指向的目標,那個目標不能通過p來修改)

//*p = "y";語法報錯;

//str[0] = "y"//這是ok的

p = str;

*p =

'y';

p++;

//char const *p 等價於const char *p

char * const

char str=

"i love china"

;//char * const p;//報錯

char *

const p = str;

//定義的時候必須初始化

//表示p一旦指向乙個東西之後,就不可以指向其他東西了

//p++;//不可以,表示p一旦指向乙個東西之後,就不可以指向其他東西了

*p =

'y';

//可以修改指定目標的中的內容

//const char * const p = str;等價於 char const * const p = str;p的指向不能變,p指向的內容也不能通過p改變。

//--

int i =

100;

const int &a = i;

//代表a的內容不能通過a自己來修改

//a =500;不合法

//int &b = 31;//錯誤的

//const int &b = 31;//可以,分配了記憶體的;

//b = 45;不可以,錯誤

//五:函式形參中帶const

struct student

;void

fs(student &stu)

student abc;

abc.num =

100;

fs(abc)

;cout

voidfs(

const student &stu)

//學習這種在形參中增加const的寫法習慣

//把形參寫成const有好多好處

//(1)可以防止無意修改形參值導致實參被無意修改

//(2)形參型別更加靈活

student aaa;

aaa.num =

100;

voidfs(

const student &stu)

fs(abc)

;cout << aaa.num

//形參前如果不加const,fs(def)這句話就是非法的

fs(def)

;/**************************************/

void

func2

(int &a)

int aa =10;

func2

(aa)

;//func2(13);//錯誤,因為func2(int &a)這是引用

void

func2

(const int &a)

int aa =10;

func2(12

);//通過

``

C 學習筆記(1)

1.類和結構體的區別 區別在於訪問控制方面,對於結構體而言,所有成員預設都是public,即在外部可以訪問,對於類來說,預設條件下成員函式都是private,不能被外部訪問。2.c 中的建構函式 建構函式最重要的作用是建立物件本身。c 規定,每個類必須有乙個建構函式,沒有它,就不能建立任何物件。乙個...

C 學習筆記1

一,類的最基本的函式 乙個類至少有預設建構函式,拷貝建構函式,拷貝構造運算子,和析構函式四個最基本的函式,在下面的例子中將對這些函式進行講解。如下 includeusing namespace std class superone superone superone void superone se...

C 學習筆記1

c 中結構體 和 類可以通用,結構體中也可以定義函式.區別 在於訪問控制。結構體中 預設成員 都是public 類中 預設 私有的 建構函式 1。建構函式最重要的作用是建立物件本身 2.c 規定,每個類必須有乙個建構函式,沒有建構函式,就不能建立任何物件 3.如果沒有提供建構函式,則c 提供乙個預設...