在c++中,為了解決一些頻繁呼叫的小函式大量消耗棧空間或者是叫棧記憶體的問題,特別的引入了inline修飾符,表示為內聯函式。
可能說到這裡,很多人還不明白什麼是棧空間,其實棧空間就是指放置程式的區域性資料也就是函式內資料的記憶體空間,在系統下,棧空間是有限的,如果頻繁大量的使用就會造成因棧空間不足所造成的程式出錯的問題,函式的死迴圈遞迴呼叫的最終結果就是導致棧記憶體空間枯竭。
下面我們來看乙個例子:
#include
#include
using
namespace std;
inline
string dbtest(int a); //函式原形宣告為inline即:內聯函式
void
main()
cin.get();
} string dbtest(int a)//這裡不用再次inline,當然加上inline也是不會出錯的
上面的例子就是標準的內聯函式的用法,使用inline修飾帶來的好處我們表面看不出來,其實在內部的工作就是在每個for迴圈的內部所有呼叫dbtest(i)的地方都換成了(i%2>0)?"奇":"偶"這樣就避免了頻繁呼叫函式對棧記憶體重複開闢所帶來的消耗。
說到這裡很多人可能會問,既然inline這麼好,還不如把所謂的函式都宣告成inline,嗯,這個問題是要注意的,inline的使用是有所限制的,inline只適合函式體內**簡單的函式使用,不能包含複雜的結構控制語句例如while switch,並且不能內聯函式本身不能是直接遞迴函式(自己內部還呼叫自己的函式)。
說到這裡我們不得不說一下在c語言中廣泛被使用的#define語句,是的define的確也可以做到inline的這些工作,但是define是會產生***的,尤其是不同型別引數所導致的錯誤,由此可見inline有更強的約束性和能夠讓編譯器檢查出更多錯誤的特性,在c++中是不推薦使用define的。
新手入門 關於C 中的內聯函式 inline
在c 中,為了解決一些頻繁呼叫的小函式大量消耗棧空間或者是叫棧記憶體的問題,特別的引入了inline修飾符,表示為內聯函式。可能說到這裡,很多人還不明白什麼是棧空間,其實棧空間就是指放置程式的區域性資料也就是函式內資料的記憶體空間,在系統下,棧空間是有限的,如果頻繁大量的使用就會造成因棧空間不足所造...
python新手入門 函式
2019 5 25 魚c教程19 20課 全域性變數與區域性變數 def discounts price,rate final price price rate return final price old price float input 請輸入原價 rate float input 請輸入折扣...
新手入門關於C 中資料結構的理解
來上海已經一段時間,感慨頗多,經歷幾輪的面試慢慢的發現,語言這方面不能以會用為標準,要懂,深入了解。路漫漫其修遠兮,吾將上下而求索。資料結構在不同的使用者中有著不同理解,但一千個人眼中的哈姆雷特還是那個哈姆雷特。資料結構 同一類資料元素中,各個元素之間的關係,包括三個成分,數資料的儲存結據的邏輯結構...