• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            inline函數包涵static變量,調用時是否同樣會有多份拷貝?

            inline   int   static_test()  
              {  
                    static   int   i   =0;  
                    ...  
              }  
              inline   代表編譯時代碼拷貝,也就有多份副本了,但本人在VC中測試,i只有一份副本,它是怎樣實現的呢? 問題點數:20、回復次數:12Top

            1 樓megaboy(飛天御劍流之殺神一刀斬)回復于 2005-08-26 23:40:10 得分 4

            內聯函數在調用時是用函數體中的內容代替函數調用,如果在多個地方使用了static_test(),就會有多條static   int   i=0;的語句,因為它們是一樣的,編譯器只會保留第一個,其余忽略。Top

            2 樓yeahsuetsing(破刀)回復于 2005-08-26 23:42:01 得分 2

            代碼拷貝不一定是c代碼的拷貝吧,可以是編譯后的匯編代碼的拷貝。而函數在代碼段,變量則在數據段??截惖闹皇谴a段中的函數部分。Top

            3 樓Darkay_Lee()回復于 2005-08-26 23:49:13 得分 4

            編譯器給靜態變量安置到數據區就可以了,數據區的初始值就是初始化時候的值,在static函數里面就忽略那個初始化的語句。Top

            4 樓xinxiakk(特亞)回復于 2005-08-26 23:55:47 得分 2

            static   變量有拷貝嗎?  
              我印象里好像沒有的說Top

            5 樓zhouhuahai(道號"虛無")回復于 2005-08-27 09:53:42 得分 4

            static變量不是放在棧里的,是放在靜態數據區.和全局變量存放在一起.  
              不能將它和局部變量混為一談Top

            6 樓zousoft(菜菜鳥的戰斗詩歌)回復于 2005-08-27 12:36:07 得分 0

            static只初始化一次Top

            7 樓jiajun2001(Jagen(嘉俊))回復于 2005-08-27 14:41:10 得分 0

            static放在全局數據區Top

            8 樓yingle2000(音樂天堂)回復于 2005-08-27 16:24:32 得分 0

            如果inline包含變量聲明,編譯器就不會作為inline處理吧?普通函數的static只初始化一次。Top

            9 樓husl(胡少磊)回復于 2005-08-27 22:57:05 得分 4

                更哪個inline沒關系吧   ,    
              inline   主要是為了省去調用函數時   對主掉函數的現場和返回地址的保存等   ,來減少調用函數的開銷  
              并且   是由編譯器決定是否將用戶定義的內聯函數作為真正的內聯函數處理,所以它應該不回改變  
              調用函數的一些東西吧   我也說不清   也就說應該和非內聯函數效果是一樣的    
              另外    
              //關于靜態變量  
              #include<IOSTREAM>  
              using   namespace   std;  
              inline   void   fun()  
              {  
              static   int   a   =   0;  
              cout   <<     "a   is"   <<   ++a   <<endl;  
              }  
              int   main()  
              {  
              fun();  
              fun();  
              return   0;  
              }  
              輸出的   1   ,2   是預期結果  
              而  
              int   main()  
              {  
                      {  
                    static   int   a   =   0;  
                    cout   <<     "a   is"   <<   ++a   <<endl;  
                        }  
                        {  
                  static   int   a   =   0;  
                    cout   <<     "a   is"   <<   ++a   <<endl;  
                        }  
              return   0;  
              }  
              輸出的是   1   ,1  
              這一點可以看出   調用含有靜態變量的函數并不像調用一般的函數   一般的函數可以直接把  
              代碼貼過去   結果是一樣的   而上面的結果不一樣  
            Top

            10 樓husl(胡少磊)回復于 2005-08-27 22:59:08 得分 0

              為啥子   高人能解釋一下嗎?Top

            11 樓SammyLan((基礎決定你能走多遠)--英語菜才是真的菜)回復于 2005-08-28 00:46:39 得分 0

            int     Rand()  
              //生成SIZE位的隨機數0<(SIZE<10)  
              //返回一個各位數都不相同的隨機數  
              {  
                      static   int   ver[SIZE];  
                      static   int   size=SIZE;  
                      static   bool   bInit=false;  
                      if   (!bInit)   {  
                              srand(unsigned(time(0)));  
                              bInit=true;  
                              for   (int   i=0;i<size;++i)   {  
                              ver[i]=i+1;  
                                }  
                        }  
                        if   (!size)   {  
                            size=SIZE;  
                        }  
                        int   i=rand()%size;  
                        int   _Rand=ver[i];  
                        --size;  
                        ver[i]=ver[size];  
                        ver[size]=_Rand;  
                        return   _Rand   ;    
              }  
              這個是最好的   (=_=)Top

            12 樓SammyLan((基礎決定你能走多遠)--英語菜才是真的菜)回復于 2005-08-28 00:47:08 得分 0

            發錯地方   (=_=)  

            posted on 2009-10-14 15:25 肥仔 閱讀(1949) 評論(1)  編輯 收藏 引用 所屬分類: C++ 基礎

            評論

            # re: inline函數包涵static變量,調用時是否同樣會有多份拷貝?  回復  更多評論   

            我頂你!轉載的文章寫的很好,“因其丑陋,見諒” 帥氣!
            2009-10-14 17:08 | blocker
            熟妇人妻久久中文字幕| 精品久久久久久久无码| 看全色黄大色大片免费久久久| 久久久久国产精品麻豆AR影院| 久久久国产精华液| 久久久久亚洲AV成人网人人网站 | 精品久久人人做人人爽综合 | 亚洲精品午夜国产va久久 | 一级女性全黄久久生活片免费 | 久久免费的精品国产V∧| 亚洲午夜久久久| 久久人人爽人人爽人人片AV麻烦| 色狠狠久久AV五月综合| 熟妇人妻久久中文字幕| 国产高潮国产高潮久久久91| 亚洲国产精品热久久| 久久影视综合亚洲| 久久精品青青草原伊人| 国产精品国色综合久久| 久久精品国产久精国产| 亚洲精品乱码久久久久久| 久久成人国产精品| 综合网日日天干夜夜久久 | 欧美伊人久久大香线蕉综合69| 99蜜桃臀久久久欧美精品网站| 久久久久国产成人精品亚洲午夜| 久久ww精品w免费人成| 99久久国产精品免费一区二区| 无码人妻久久一区二区三区蜜桃| 国产亚洲精久久久久久无码AV| 国产精品99久久99久久久| 久久久无码精品亚洲日韩按摩 | 国产精品久久国产精品99盘| 伊人久久无码精品中文字幕| 久久久亚洲精品蜜桃臀| 久久久久女教师免费一区| 51久久夜色精品国产| 国产精品成人久久久久三级午夜电影 | 久久久久亚洲AV成人网人人软件| 精品久久久久久无码中文字幕一区| 九九精品久久久久久噜噜|