行內函數與巨集的差別
C++程式語言
巨集是內聯程式碼的原始實現。
#define SQUARE(X) X*X
這並不是以傳遞引數實現的,而是通過文字替代實現的--X是“引數”的符號標記。
在標準C中,傳遞引數主要有2種方式:1.按值傳遞;2.按指標傳遞
在C++中,新增了一種與指標傳遞非常類似的傳遞方式:按引用傳遞。
引用的特點:
1.必須在宣告的時候進行初始化
2.宣告一旦初始化就不能再對引用變數進行修改
3.引用變數並不是新增了一個變數,而是對某個變數取了一個唯一的別名,每個“人”既可以
通過該變數的正式名字找到這個變數,也可以通過這個特殊的別名找到它。
4.引用變數的就是為了更好地傳遞函式引數。
5.當引用變數作為引數時,在呼叫函式時,不能把表示式當作引數傳遞給函式
int a(int& x)
{
return x;
}
int main(void)
{
int y = 1;
int& z = y;
a(1+z);
}
主函式第三行中呼叫了函式a(),但是引數是一個表示式,該呼叫是錯誤的。相關推薦
行內函數與巨集的差別
C++程式語言 巨集是內聯程式碼的原始實現。 #define SQUARE(X) X*X 這並不是以傳遞引數實現的,而是通過文字替代實現的--X是“引數”的符號標記。 在標準C中,傳遞引數主要有2種方式:1.按值傳遞;2.按指標傳遞 在C++中,新增了一種與指標傳遞非常類
行內函數與巨集的簡單說明
1. c 語言中的巨集 c語言使用預處理語句#define來實現巨集定義,例如一個計算平方的巨集: #define square_mine(x) x*x 需要說明的是,巨集並不是通過傳遞引數實現的,而是通過文字替換來實現。 看下面的例子: #in
C++ 普通行內函數 及行內函數與巨集的區別
巨集的使用: 因為函式的呼叫必須要將程式執行的順序轉移到函式所存放在記憶體中的某個地址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。這種轉移操作要求在轉去執行前要儲存現場並記憶執行的地址,轉回後要恢復現場,並按原來儲存地址繼續執行。因此,函式呼叫要有一定
行內函數與巨集的區別
行內函數是程式碼被插入到呼叫者程式碼處的函式。如同 #define 巨集,行內函數通過避免被呼叫的開銷來提高執行效率,尤其是它能夠通過呼叫(“過程化整合”)被編譯器優化。 內 聯函式和巨集很類似,而區別在於,巨集是由前處理器對巨集進行替代,而行內函數是通過編譯器控
行內函數與巨集函式的區別
行內函數 概念 以inline修飾的函式叫做行內函數,編譯時C++編譯器會在呼叫行內函數的地方展開,沒有函式壓棧的開銷,行內函數提升程式執行的效率 特性 inline
行內函數與巨集、普通函式的區別
行內函數是程式碼被插入到呼叫者程式碼處的函式。如同 #define 巨集,行內函數通過避免被呼叫的開銷來提高執行效率,尤其是它能夠通過呼叫(“過程化整合”)被編譯器優化。 行內函數和巨集很類似,而區別在於,巨集是由前處理器對巨集進行替代,而行內函數是通過編譯器控制來實現的。而且行內函數是真正的函式,只
inline 行內函數詳解 行內函數與巨集定義的區別
一、在C&C++中 一、inline 關鍵字用來定義一個類的行內函數,引入它的主要原因是用它替代C中表達式形式的巨集定義。 表示式形式的巨集定義一例: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*(
行內函數與巨集
求兩個整數和的巨集 #define Sum(nNoA,nNoB)((nNoA)+(nNoB)) 巨集在預處理時把巨集程式碼展開,不需要類似函式似的儲存現場和恢復現場,執行效率而言更高。這也是C語言中大量使用巨集的原理。 巨集也有兩面性,如巨集不能訪問物件的私有成員;容易引起
c++行內函數與巨集的區別
c++行內函數 c++行內函數與常規函式的主要區別不在於編寫方式的不同。在於c++編譯器如何將它們組合到程式中。 執行到函式呼叫指令時,程式將立即儲存該指令的記憶體地址,變將函式複製到堆疊,跳到標記函式起點 的記憶體單元,執行函式程式碼,函式體執行完後跳到地址被儲存的指令處
C語言 inline行內函數與帶參巨集
C語言 inline行內函數與帶參巨集 一、簡述 簡單的介紹inline行內函數、帶參巨集的作用。 二、函式的執行與呼叫 函式執行:會將之前的棧的頂,棧基址壓棧,並在棧中開
行內函數與帶引數巨集區別(筆記)
1.行內函數呼叫時,會進行型別檢查,要求實參和形參的型別一致,另外行內函數會先對實參表示式進行求值,然後傳遞給形參;而巨集呼叫時只用實參簡單地替換形參。 2.行內函數實在編譯的時候,在呼叫的地方將程式碼展開,而巨集則是在預處理時進行替換的。 3.C++中建議採用inli
行內函數,巨集定義,記憶體對齊,型別轉換
巨集 與 inline的區別 存在的價值,兩者都是文字替換,降低程式跳轉次數,提高效率 1. define 是預處理命令,無法除錯 ,最簡單文字替換, inline 是編譯期替換,可以除錯, 存在引數型別檢查 2. 使用inline的時候,函式必須定義 直接定義的函式
行內函數和巨集
巨集定義和行內函數的區別 1. 巨集定義不是函式,但是使用起來像函式。前處理器用複製巨集程式碼的方式代替函式的呼叫,省去了函式壓棧退棧過程,提高了效率。 行內函數本質上是一個函式,行內函數一般用於函式體的程式碼比較簡單的函式,不能包含複雜的控制語句,while、sw
行內函數與普通函式有什麼區別
轉載 2007年12月25日 14:32:00 xiaoyan_cug 閱讀數:796 行內函數和普通函式相比可以加快程式的執行的速度,因為在呼叫行內函數時,不需要中斷,在編譯的時候直接將行內函數鑲嵌到目的碼中。內聯是以增加空間消耗為代價,換取時間開銷。巨集只是一種簡單
【C++】行內函數和巨集的區別
行內函數 行內函數指的是用[ inline ]關鍵字修飾的函式,在類體內定義的函式會被預設定義為行內函數 特性 行內函數會在【編譯】期間進行替換,就是將呼叫該函式的地方換成【函式體】(類似於C語言中的巨集,然而巨集是在【預處理】階段進行替換) 行內函數和巨集的不同之處 1、
面試---行內函數和巨集定義的區別
用行內函數取代巨集: 1.行內函數在執行時可除錯,而巨集定義不可以; 2.編譯器會對行內函數的引數型別做安全檢查或自動型別轉換(同普通函式),而巨集定 義則不會; 3.行內函數可以訪問類的成員變數,巨集定義則不能; 4.在類中宣告同時定義的成員函式,自
行內函數和巨集定義的區別和聯絡
深入到計算機的本質,其實,很多東西還是細節需要深入分析的,比如我最近的一份工作 行內函數和巨集很類似,都是以空間換時間,都能一定程度上加快程式的執行。而區別在於,巨集是由前處理器對巨集進行替代,而行內函數是通過編譯器控制來實現的。而且行內函數是真正的函式,只是在需要用到的時候,行內函數像巨集一樣的展
行內函數和巨集定義的區別
使用巨集和行內函數都可以節省在函式呼叫方面所帶來的時間和空間開銷。二者都採用了空間換時間的方式,在其呼叫處進行展開: (1) 在預編譯時期,巨集定義在呼叫處執行字串的原樣替換。在編譯時期,行內函數在
c++中得行內函數和巨集定義
在c++中行內函數是對巨集定義一種改造,因為利用行內函數取代巨集定義得好處是: 1、可進行型別安全檢查或自動型別轉換、 例如:在c語言中,常用前處理器語句#define來代替一個函式定義。例如: #define MAX(a,b) ((a)>(b
行內函數 和 巨集定義 區別
用內聯取代巨集: 1.行內函數在執行時可除錯,而巨集定義不可以; 2.編譯器會對行內函數的引數型別做安全檢查或自動型別轉換(同普通函式),而巨集定義則不會; 3.行內函數可以訪問類的成員變數,巨集定義則不能; 4.在類中宣告同時定義的成員函式,自動轉化為行內函數。