C 程式設計思想讀書筆記 9 內聯函式

2021-09-06 10:19:53 字數 1381 閱讀 8573

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...