主要內容:
內聯函式
內聯函式與帶引數巨集區別
新的型別轉換運算子
一、內聯函式
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 中特殊成員函式 主要是在建立物件時 初始化物件 為物件的成員變數賦值 注...