C 學習筆記(五) 從C到C

2021-07-09 15:45:07 字數 1745 閱讀 3851

主要內容:

內聯函式

內聯函式與帶引數巨集區別

新的型別轉換運算子

一、內聯函式

inline int max(int a, int b)

二、內聯函式與帶引數巨集的區別

1.內聯函式呼叫時,要求實參和形參的型別一致

內聯函式會先對實參表示式進行求值,然後傳遞給形參

而巨集呼叫時只用實參簡單地替換形參

2.內聯函式是在編譯的時候、在呼叫的地方將**展開的

而巨集則是在預處理時進行替換的

注:在c++中建議採用inline函式來替換帶引數的巨集。

三、新的型別轉換符

舊式轉型

(t)expr

t(expr)

新式轉型

const_cast(expr)

static_cast(expr)

reinterpret_cast(expr) 

dynamic_cast(expr)

1.const_cast

用來移除物件的常量性

const_cast一般用於指標或者引用

使用const_cast去除const限定的目的不是為了修改它的內容,通常是為了函式能夠接受這個實際引數

void fun(int &val);

const int val = 100;

fun(const_cast(val));

注:const_cast去除const限定後並不能改變常量的值

2.static_const

編譯器隱式執行的任何型別轉換都可以由static_cast完成

當乙個較大的算術型別賦值給較小的型別時,可以用static_cast進行強制轉換。

double val = 3.14;

int val2 = static_cast(val);

可以將void*指標轉換為某一型別的指標

int val = 3.14;

void* val3 = &val;

int* val4 = static_cast(val3);

可以將基類指標指向派生類指標

無法將const轉化為nonconst,這個只有const_cast才可以辦得到

3.reinterpret_cast(不知有何用處)

「通常為運算元的位模式提供較低層的重新解釋」也就是說將資料以二進位制存在形式的重新解釋。

int i;

char *p = "this is a example.";

i = reinterpret_cast(p);

//此時結果,i與p的值是完全相同的。

int *ip

char *pc = reinterpret_cast(ip);

// 程式設計師需要記得pc所指向的真實物件是int型,並非字串。

// 如果將pc當作字元指標進行操作,可能會造成執行時錯誤

// 如int len = strlen(pc);

4.dynamic_cast

執行「安全向下」轉型操作,也就是說支援執行時識別指標或所指向的物件,這是唯一個無法用舊式語來進行的轉型操作。

四、盡量避免強制型別轉換

盡可能避免使用強制轉換

如果無法避,推薦使用新式型別轉換

C 學習之從C到C

包含標頭檔案可以不加.h結尾,如iostream,一些常用的標頭檔案在引用時可以不加.h字尾,並在開頭增加c,如 include include include在c中的強制型別轉換為 int 3.5 而在c 中的強制型別轉換為int 3.5 更加清晰直觀。在 c 中,宣告乙個函式時,可以指定預設的輸...

從C 到C 我的C語言學習筆記

剛上大學就學習了c 有人跟我說c 包括了c語言,學過c 就沒有必要在弄c語言了。也有人說,c語言是程式設計師的通用語言,我們都應該花時間好好研究一下。之前也有看過一些書,這些書的作者也都建議讀者學好c,而且強調不是c 一直都有學習c語言的打算,直到我嘗試寫c程式發現編譯都不過時,我才覺得我真有必要好...

C到C 轉換(五)

我是乙個正在學習c 的同學,把自己的學習筆記和一些自己的理解記錄下來。如果有什麼地方寫得不對,還希望各位朋友指正。我寫的是有c語言基礎之後學習c 的學習經歷。並不是零基礎學習c 建構函式 在建立物件的時候會自動呼叫的函式 是c 中特殊成員函式 主要是在建立物件時 初始化物件 為物件的成員變數賦值 注...