• <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>

            大漠落日

            while(!dead) study++;
            posts - 46, comments - 126, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            C++對象的空間分配與初始化時機

            Posted on 2012-03-10 11:55 亂78糟 閱讀(965) 評論(0)  編輯 收藏 引用 所屬分類: C語言派系
            C++規定,一個變量可以在程序范圍內的任何地方定義,也就是說在這個變量定義之前編譯器是無法給它分配內存空間的。在這點上和C不同,C強制要求變量的聲明和定義必須放在條件塊的開始。
            雖然如此,但是現在的C++編譯器通常像C編譯器一樣,在一個程序塊的開頭就分配好所有變量的內存。這一切對于程序員來說是透明的,因為我們的變量在定義之前總是無法得到存儲空間,即便編譯器這么干了!
            即使存儲空間在一開始就被分配了,但是C++對象的構造函數仍然需要到對象定義的時候才會被調用,因為標識符只有到此時才是有效的。編譯器為了防止程序員用一些條件選擇手段跳過變量的初始化就開始使用,它會檢查代碼中是否把一個變量對象的定義放到了條件塊中,比如switch的case塊,goto等,看下面這段代碼:
             1 #include <iostream>
             2 #include <string>
             3 
             4 using namespace std;
             5 
             6 class A{
             7 public:
             8     //A(){} //對于VC2005和GCC來說,只有提供構造函數,編譯器才會檢測出錯誤
             9 int b;
            10 };
            11 
            12 int main()
            13 {
            14     int i;
            15     cin>>i;
            16 
            17     if (i < 10)
            18         goto flag;
            19 
            20     A fsd;            //構造函數的調用被goto跳過
            21     fsd.b = i;
            22 
            23 flag:
            24     switch (i)
            25     {
            26     case 1:
            27         A a;
            28         a.b = 3;
            29         break;
            30     case 10:
            31         {
            32         A aa;
            33         aa.b = 10;
            34         cout<<a.b<<endl; //error C2360: initialization of 'a' is skipped by 'case' label
            35         break;
            36         }
            37     default:
            38         break;
            39     }
            40 
            41     cout<<fsd.b<<endl;//如果輸入參數小于10,那么fsd的初始化將被跳過,程序運行到這里崩潰
            42 
            43     return 0;
            44 }
            輸入1,跳過了fsd的初始化,程序運行結果不可知。
            輸入10,跳過了a的初始化,程序運行結果同樣不可知。

            国产精品女同一区二区久久| 久久久久久人妻无码| 国产99久久久久久免费看| 国产精品热久久无码av| 亚洲性久久久影院| 久久综合丝袜日本网| 久久笫一福利免费导航| 青青草国产精品久久| 久久久精品国产免大香伊 | 国产成人久久精品区一区二区| 久久精品国产91久久综合麻豆自制 | 国内精品欧美久久精品| 亚洲国产精品18久久久久久| 久久精品国产精品亜洲毛片 | 一本久道久久综合狠狠爱| 99热精品久久只有精品| 午夜天堂av天堂久久久| 久久久久亚洲精品无码网址 | AV色综合久久天堂AV色综合在| 久久久久国产亚洲AV麻豆| 久久精品麻豆日日躁夜夜躁| 久久久久亚洲AV成人网人人软件| 国产亚洲精久久久久久无码| 一个色综合久久| 久久亚洲国产精品五月天婷| 亚洲国产精品久久久久婷婷软件 | 久久综合国产乱子伦精品免费| 亚洲国产成人精品91久久久| 国产巨作麻豆欧美亚洲综合久久| 国产三级久久久精品麻豆三级| 欧美大香线蕉线伊人久久| 漂亮人妻被中出中文字幕久久| 亚洲国产精品综合久久网络| 久久久WWW成人免费精品| 久久精品无码av| 久久九九免费高清视频| 国产三级观看久久| 中文字幕久久亚洲一区| 久久精品国产乱子伦| 亚洲国产精品无码久久久蜜芽 | 99久久国产综合精品女同图片|