資料介紹
什么是內聯性和外聯函數
類的成員函數可以分為內聯函數和外聯函數。內聯函數是指那些定義在類體內的成員函數,即該函數的函數體放在類體內。而說明在類體內,定義在類體外的成員函數叫外聯函數。外聯函數的函數體在類的實現部分。
內聯函數在調用時不是像一般的函數那樣要轉去執行被調用函數的函數體,執行完成后再轉回調用函數中,執行其后語句,而是在調用函數處用內聯函數體的代碼來替換,這樣將會節省調用開銷,提高運行速度。
內聯函數與前面講過的帶參數的宏定義進行一下比較,它們的代碼效率是一樣的,但是內聯函數要優于宏定義,因為內聯函數遵循函數的類型和作用域規則,它與一般函數更相近,在一些編譯器中,一旦關上內聯擴展,將與一般函數一樣進行調用,調試比較方便。
外聯函數變成內聯函數的方法很簡單,只要在函數頭前面加上關鍵字inline就可以了。
#include 《iostream》
using namespace std;
class A
{
public:
A(int x, int y) //內聯函數
{
X=x;Y=y;
}
int a() //內聯函數
{
return X;
}
int b() //內聯函數
{
return Y;
}
int c();
int d();
private:
int X,Y;
};
//inline定義內聯函數
inline int A::c()
{
return a()+b();
}
inline int A::d()
{
return c();
}
void main()
{
A m(3,5);
int I=m.d();
cout《《“d()return:”《《I《《endl;
}
輸出結果:
d()return:8
說明:類A中,直接定義了3個內聯函數,又使用inline定義了2個內聯函數。
引入內聯函數的意義
函數是一種更高級的抽象。它的引入使得編程者只關心函數的功能和使用方法,而不必關心函數功能的具體實現;函數的引入可以減少程序的目標代碼,實現程序代碼和數據的共享。但是,函數調用也會帶來降低效率的問題,因為調用函數實際上將程序執行順序轉移到函數所存放在內存中某個地址,將函數的程序內容執行完后,再返回到轉去執行該函數前的地方。這種轉移操作要求在轉去前要保護現場并記憶執行的地址,轉回后先要恢復現場,并按原來保存地址繼續執行。因此,函數調用要有一定的時間和空間方面的開銷,于是將影響其效率。特別是對于一些函數體代碼不是很大,但又頻繁地被調用的函數來講,解決其效率問題更為重要。引入內聯函數實際上就是為了解決這一問題。
在程序編譯時,編譯器將程序中出現的內聯函數的調用表達式用內聯函數的函數體來進行替換。顯然,這種做法不會產生轉去轉回的問題,但是由于在編譯時將函數體中的代碼被替代到程序中,因此會增加目標程序代碼量,進而增加空間開銷,而在時間代銷上不象函數調用時那么大,可見它是以目標代碼的增加為代價來換取時間的節省。
在程序中,調用其函數時,該函數在編譯時被替代,而不是像一般函數那樣是在運行時被調用。
使用內聯函數應注意的事項
內聯函數具有一般函數的特性,它與一般函數所不同之處只在于函數調用的處理。一般函數進行調用時,要將程序執行權轉到被調用函數中,然后再返回到調用它的函數中;而內聯函數在調用時,是將調用表達式用內聯函數體來替換。在使用內聯函數時,應注意如下幾點:
1.在內聯函數內不允許用循環語句和開關語句。
如果內聯函數有這些語句,則編譯將該函數視同普通函數那樣產生函數調用代碼,遞歸函數(自己調用自己的函數)是不能被用來做內聯函數的。內聯函數只適合于只有1~5行的小函數。對一個含有許多語句的大函數,函數調用和返回的開銷相對來說微不足道,所以也沒有必要用內聯函數實現。
2.內聯函數的定義必須出現在內聯函數第一次被調用之前。
3.本欄目講到的類結構中所有在類說明內部定義的函數是內聯函數。
?
類的成員函數可以分為內聯函數和外聯函數。內聯函數是指那些定義在類體內的成員函數,即該函數的函數體放在類體內。而說明在類體內,定義在類體外的成員函數叫外聯函數。外聯函數的函數體在類的實現部分。
內聯函數在調用時不是像一般的函數那樣要轉去執行被調用函數的函數體,執行完成后再轉回調用函數中,執行其后語句,而是在調用函數處用內聯函數體的代碼來替換,這樣將會節省調用開銷,提高運行速度。
內聯函數與前面講過的帶參數的宏定義進行一下比較,它們的代碼效率是一樣的,但是內聯函數要優于宏定義,因為內聯函數遵循函數的類型和作用域規則,它與一般函數更相近,在一些編譯器中,一旦關上內聯擴展,將與一般函數一樣進行調用,調試比較方便。
外聯函數變成內聯函數的方法很簡單,只要在函數頭前面加上關鍵字inline就可以了。
#include 《iostream》
using namespace std;
class A
{
public:
A(int x, int y) //內聯函數
{
X=x;Y=y;
}
int a() //內聯函數
{
return X;
}
int b() //內聯函數
{
return Y;
}
int c();
int d();
private:
int X,Y;
};
//inline定義內聯函數
inline int A::c()
{
return a()+b();
}
inline int A::d()
{
return c();
}
void main()
{
A m(3,5);
int I=m.d();
cout《《“d()return:”《《I《《endl;
}
輸出結果:
d()return:8
說明:類A中,直接定義了3個內聯函數,又使用inline定義了2個內聯函數。
引入內聯函數的意義
函數是一種更高級的抽象。它的引入使得編程者只關心函數的功能和使用方法,而不必關心函數功能的具體實現;函數的引入可以減少程序的目標代碼,實現程序代碼和數據的共享。但是,函數調用也會帶來降低效率的問題,因為調用函數實際上將程序執行順序轉移到函數所存放在內存中某個地址,將函數的程序內容執行完后,再返回到轉去執行該函數前的地方。這種轉移操作要求在轉去前要保護現場并記憶執行的地址,轉回后先要恢復現場,并按原來保存地址繼續執行。因此,函數調用要有一定的時間和空間方面的開銷,于是將影響其效率。特別是對于一些函數體代碼不是很大,但又頻繁地被調用的函數來講,解決其效率問題更為重要。引入內聯函數實際上就是為了解決這一問題。
在程序編譯時,編譯器將程序中出現的內聯函數的調用表達式用內聯函數的函數體來進行替換。顯然,這種做法不會產生轉去轉回的問題,但是由于在編譯時將函數體中的代碼被替代到程序中,因此會增加目標程序代碼量,進而增加空間開銷,而在時間代銷上不象函數調用時那么大,可見它是以目標代碼的增加為代價來換取時間的節省。
在程序中,調用其函數時,該函數在編譯時被替代,而不是像一般函數那樣是在運行時被調用。
使用內聯函數應注意的事項
內聯函數具有一般函數的特性,它與一般函數所不同之處只在于函數調用的處理。一般函數進行調用時,要將程序執行權轉到被調用函數中,然后再返回到調用它的函數中;而內聯函數在調用時,是將調用表達式用內聯函數體來替換。在使用內聯函數時,應注意如下幾點:
1.在內聯函數內不允許用循環語句和開關語句。
如果內聯函數有這些語句,則編譯將該函數視同普通函數那樣產生函數調用代碼,遞歸函數(自己調用自己的函數)是不能被用來做內聯函數的。內聯函數只適合于只有1~5行的小函數。對一個含有許多語句的大函數,函數調用和返回的開銷相對來說微不足道,所以也沒有必要用內聯函數實現。
2.內聯函數的定義必須出現在內聯函數第一次被調用之前。
3.本欄目講到的類結構中所有在類說明內部定義的函數是內聯函數。
?
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- msp430學習1——msp內聯函數
- STM32 之 標準外設版USB驅動庫詳解(架構+文件+函數+使用說明+示例程序) 0次下載
- EE-32:語言擴展:內存存儲類型、ASM和內聯構造
- BLE實驗詳解之藍牙血壓計設計方案 36次下載
- Android開發手冊API函數詳解資料免費下載 0次下載
- Linux內核GPIO操作函數的詳解分析 28次下載
- 網絡函數的習題與詳解詳細說明 0次下載
- C++語言入門教程之C++語言程序設計函數的詳細資料概述免費下載 23次下載
- 《Python開發技術詳解》-隨書附帶程序 0次下載
- 多核嵌入式系統內聯網絡優化調度 1次下載
- 基于Android開發手冊—API函數詳解 18次下載
- Android開發手冊—API函數詳解 13次下載
- 類成員函數與普通函數的區別研究 32次下載
- 基于SUIF的函數內聯技術
- PICC庫函數詳解
- 內聯函數定義 為什么需要內聯函數 445次閱讀
- STM32庫函數SystemInit()詳解 3341次閱讀
- 詳解halcon函數的封裝方法 965次閱讀
- Python函數詳解 549次閱讀
- C語言內聯函數 835次閱讀
- getchar()函數詳解 1703次閱讀
- 初探Golang內聯 823次閱讀
- 詳解回調函數的概念及使用步驟 3872次閱讀
- 內聯網的詳細資料介紹 5398次閱讀
- 探究STM32Cube LL為何能高效的原因 6133次閱讀
- lisp函數大全詳解 3.8w次閱讀
- Java之內聯函數_內聯函數的優缺點 3206次閱讀
- 內聯函數的主要作用是什么_內聯函數在C語言中的作用 1.6w次閱讀
- 內聯函數和普通函數的區別在哪里 3.5w次閱讀
- 內聯函數和外聯函數有什么區別 5722次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多