在c++中,爲了解決一些頻繁調用的小函數大量消耗棧空間或者是叫棧內存的問題,非凡的引入了inline修飾符,表示爲內聯函數。
可能說到這裏,很多人還不明白什麽是棧空間,其實棧空間就是指放置程序的局部數據也就是函數內數據的內存空間,在系統下,棧空間是有限的,假如頻繁大量的使用就會造成因棧空間不足所造成的程序出錯的問題,函數的死循環遞歸調用的最終結果就是導致棧內存空間枯竭。 下面我們來看一個例子:#include <iostream>
#include <string>
using namespace std;
inline string dBTest(int a); //函數原形聲明爲inline即:內聯函數
void main()
{
for (int i=1;i<=10;i++)
{
cout << i << ":" << dbtest(i) << endl;
}
cin.get();
}
string dbtest(int a)//這裏不用再次inline,當然加上inline也是不會出錯的
{
return (a%2>0)?"奇":"偶";
}上面的例子就是標准的內聯函數的用法,使用inline修飾帶來的好處我們表面看不出來,其實在內部的工作就是在每個for循環的內部所有調用dbtest(i)的地方都換成了(i%2>0)?"奇":"偶"這樣就避免了頻繁調用函數對棧內存重複開辟所帶來的消耗。 說到這裏很多人可能會問,既然inline這麽好,還不如把所謂的函數都聲明成inline,嗯,這個問題是要注重的,inline的使用是有所限制的,inline只適合函數體內代碼簡單的函數使用,不能包含複雜的結構控制語句例如while switch,並且不能內聯函數本身不能是直接遞歸函數(自己內部還調用自己的函數)。 說到這裏我們不得不說一下在c語言中廣泛被使用的#define語句,是的define的確也可以做到inline的這些工作,但是define是會産生副作用的,尤其是不同類型參數所導致的錯誤,由此可見inline有更強的約束性和能夠讓編譯器檢查出更多錯誤的特性,在c++中是不推薦使用define的。關于內聯函數的更多例子我就不一一舉出了,靈活的使用也多靠學習者本身,我只在此抛磚引玉,讓大家盡可能多的學習到c++中的一些新的先進的特性知識點。
更多內容請看C/C++技術學堂 C/C++技術專題 Solaris基礎知識入門專題,或
在C++語言中,關于內聯函數(inline)的入門教程!在c++中,爲了解決一些頻繁調用的小涵數大量消耗棧空間或者是叫棧內存的問題,非凡的引入了inline修飾符,表示爲內聯涵數。 ...查看完整版>>
在C++語言中,關于內聯函數(inline)的入門教程!
關于C++中的內聯函數(inline)在c++中,爲了解決一些頻繁調用的小函數大量消耗棧空間或者是叫棧內存的問題,特別的引入了inline修飾符,表示爲內聯函數。 可能說到這裏,很多人還不明白什麽是棧空間,其實棧空間就是指放置程序的局部數據也就...查看完整版>>
關于C++中的內聯函數(inline)
理解內聯函數inline在C++中的用法 在C++中,爲了解決一些頻繁調用的小涵數大量消耗棧空間或者是叫棧內存的問題,非凡的引入了inline修飾符,表示爲內聯涵數。 可能說到這裏,很多人還不明白什麽是棧空間,其實棧空間就是指放置程序的局部數據...查看完整版>>
理解內聯函數inline在C++中的用法
理解內聯函數inline在C++中的用法作者: 管甯 C++學習資源網 在C++中,爲了解決一些頻繁調用的小涵數大量消耗棧空間或者是叫棧內存的問題,特別的引入了inline修飾符,表示爲內聯涵數。 ...查看完整版>>
理解內聯函數inline在C++中的用法
新手入門:C++中堆內存(heap)的概念和操作方法 堆內存是什麽呢? 我們知道在c/c++中定義的數組大小必需要事先定義好,他們通常是分配在靜態內存空間或者是在棧內存空間內的,但是在實際工作中,我們有時候卻需要動態的爲數組分配大小, ...查看完整版>>
新手入門:C++中堆內存(heap)的概念和操作方法
爲什麽C++中的拷貝構造函數參數不能值傳遞Received: by mail.email.jlu.edu.cn (ecMail, from userid 99)To:Subject: helpDate: Sun, 10 Oct 2004 11:00:03 +0800From: 阿超玉良: 爲什麽在C++中拷貝構造函數只有一個參數的時候爲什麽不能是對象,而必須是...查看完整版>>
爲什麽C++中的拷貝構造函數參數不能值傳遞
C++內聯函數(Inline)介紹介紹內聯函數之前,有必要介紹一下預處理宏。內聯函數的功能和預處理宏的功能相似 。相信大家都用過預處理宏,我們會經常定義一些宏,如 #define TABLE_COMP(x) ((x)>0?(x):0) 就定義了一個宏。 爲什麽要...查看完整版>>
C++內聯函數(Inline)介紹
新手入門:C++中的函數重載 函數重載是用來描述同名函數具有相同或者相似功能,但數據類型或者是參數不同的函數治理操作的稱呼。 我們來...查看完整版>>
新手入門:C++中的函數重載
C++ 內聯函數 引入內聯函數的目的是爲了解決程序中函數調用的效率問題。 函數是一種更高級的抽象。它的引入使得編程者只關心函數的功能和使用方法,而不必關心函數功能的具體實現;函數的引入可以減少程序的目標代碼,實現...查看完整版>>
C++ 內聯函數