/*函式新特性,內聯函式,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和&tmpvalue列印的位址是一樣的。
k =10
;//向不屬於自己的記憶體寫入值,巨大隱患
int k =
myfunc()
;cout<<
&k /&k和tmpvalue列印出的位址不一樣
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 /輸出1010
//(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 /1010
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 提供乙個預設...