1 在c語言中使用巨集可以提高程式效率,但巨集容易出錯
在巨集定義中,最好給變數打上括號,否則容易出錯.
於處理器 無法對巨集的引數型別和返回值進行簡單
巨集和普通函式是有區別的,普通函式是值傳遞或者位址傳遞,但巨集是簡單地拷貝,特別引數是a++這種容易使a++多次執行
2 在巨集裡,沒法表示類的作用範圍.所以類中不能使用巨集.轉而使用內聯函式
在類的宣告中直接寫上函式定義的預設是inline函式
內聯函式和普通函式差不多,會受到編譯器的檢查引數列表和返回值. 但在呼叫時可以直接將函式直接替換成函式體,減小呼叫開銷,
但是否內聯是編譯器決定的,即使明確寫上inline也可能不按內聯進行替換,下面兩種情況是明確不能內聯的:
1 函式體複雜,比如有迴圈就不能內聯,原因是複雜的函式體替換會削弱甚至不會帶來效能上的提高
2 顯示或隱式地取該函式位址,編譯器必須為函式體分配記憶體
3 向前引用
class f
int g() const
}
c++規定: 只有在類宣告結束後,類中的內聯函式才起作用
所以引用未宣告的內部函式是可以的
4 內聯無法取代巨集的地方:
字串定義: 將任意識別符號轉換成字串陣列
#define f(s) cout<< #s << endl; s ;
標誌貼上:
#define d1(x) int x##one;
#define d2(x) int x##two;
head.h
#ifndef head_h
#define head_h
#define f(s) cout<< #s << endl; s ;
#define d1(x) int x##one;
#define d2(x) int x##two;
class forward
int g()
};#endif
main.cpp
#include #include #include "head.h"
using namespace std;
int main()
{ f(cout << "abc" << endl;);
d1(num);
d2(num);
numone = 100;
numtwo = 200;
f(cout<
zhao@ubuntu:~/c++work/cpp9$ ./a.out
cout << "abc" << endl;
abccout<
《C專家程式設計》讀書筆記9
第九章 再論陣列 宣告本身還可以進一步分成3種情況 外部宣告 external array 的宣告。陣列的定義 記住,定義是宣告的一種特殊情況,它分配記憶體空間,並可能提供乙個初始值 函式引數的宣告。所有作為函式引數的陣列名總是可以通過編譯器轉換為指標。作為函式定義的形式引數,char s和 cha...
C 程式設計思想讀書筆記 C 中的C
一 資料型別 data type 定義使用儲存空間 記憶體 的方式 1 內部資料型別 編譯器本身能理解的資料型別。標準c的內部型別規範不說明每個內部資料型別必須有多少位,只規定其必須能儲存的最大值和最小值。使用者定義資料型別 抽象資料型別。2 4個基本資料型別 char int float doub...
讀書筆記之 C 程式設計思想 第2卷
c 程式設計思想 第2卷 主要是介紹的標準c 中一些比較高階的功能,包括異常處理,模板,標準庫演算法,容器,執行時型別資訊rtti。最後還包括兩部分,設計模式和併發。這兩部分是挺好的。但是,我現在對設計模式和併發也了解的不多,所以,現在是這兩部分略過先,等以後有時間再回過頭來學習設計模式和併發。第1...