與全域變數構造析構順序有關的一道面試題(C++)

來源:互聯網
上載者:User
題目是
#include  <iostream>
int  main()
{
    std::cout<<"This is in main"<<std::endl;

    return 0;
}

如何在不修改上述代碼中mian()裡面的部分,使輸出的內容為:
Start
This is in main
End

解答:
此題我一開始想到的方法是重寫std裡得cout類,修改其中<<運算子的實現,經過面試我的高手提示,說是重載這個運算子比較危險,而且需要重寫全部的函數不太現實。當時比較沮喪,沒有想到其他的辦法。

回來後,複習基礎知識中發現有關於全域變數介紹的這麼一句話:
全域對象在調用 main之前初始化, 在退出main之後析構
真是一語驚醒夢中人,完全可以用申明一個全域變數的方法實現上面這個題目。
具體實現代碼如下,就是在main之前加了一個gb類的定義,然後在建立一個這個類的全域變數:

#include "stdafx.h"
#include <iostream>

class gb
{
public:
    gb::gb()
    {
        std::cout<<"start"<<std::endl;
    };

    gb::~gb()
    {
        std::cout<<"end"<<std::endl;
    };
};

gb a;

int main()
{
    std::cout<<"This is in main"<<std::endl;
   
    return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.