• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 在C++語言中,關于內聯函數(inline)的入門教程

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    在c++中,為了解決一些頻繁調用的小涵數大量消耗??臻g或者是叫棧內存的問題,特別的引入了inline修飾符,表示為內聯涵數。 可能說到這里,很多人還不明白什么是??臻g,其實??臻g就是指放置程序的局部數據也就是函數內數據的內存空間,在系統下,??臻g是有
    在c++中,為了解決一些頻繁調用的小涵數大量消耗??臻g或者是叫棧內存的問題,特別的引入了inline修飾符,表示為內聯涵數。

    可能說到這里,很多人還不明白什么是??臻g,其實??臻g就是指放置程序的局部數據也就是函數內數據的內存空間,在系統下,??臻g是有限的,如果頻繁大量的使用就會造成因??臻g不足所造成的程序出錯的問題,涵數的死循環遞歸調用的最終結果就是導致棧內存空間枯竭。

    下面我們來看一個例子

    //程序作者:管寧
    //站點:www.cndev-lab.com
    //所有稿件均有版權,如要轉載,請務必著名出處和作者

    #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的。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>