SORU
10 EYLÜL 2008, ÇARŞAMBA


İşlev düzeyinde statik değişkenler ayrılan/başlatıldı?

Genel olarak bildirilen bir değişken ayrılan (ve) başlatıldı, varsa program başlatmak zaman almak konusunda eminim.

int globalgarbage;
unsigned int anumber = 42;

Ama ne statik olanlar bir işlev içinde tanımlanmış?

void doSomething()
{
  static bool globalish = true;
  // ...
}

globalish için yer tahsis edilir? Program başladığında tahmin ediyorum. Ama o zaman da başlatıldı mı? Ya doSomething() ilk geldiğinde başlatıldı?

CEVAP
11 EYLÜL 2008, PERŞEMBE


Aşağıdaki test programı yazdım ve g 4.1.2 sürümü ile derlenmiş ve bu konuyu merak ettim.

include <iostream>
#include <string>

using namespace std;

class test
{
public:
        test(const char *name)
                : _name(name)
        {
                cout << _name << " created" << endl;
        }

        ~test()
        {
                cout << _name << " destroyed" << endl;
        }

        string _name;
};

test t("global variable");

void f()
{
        static test t("static variable");

        test t2("Local variable");

        cout << "Function executed" << endl;
}


int main()
{
        test t("local to main");

        cout << "Program start" << endl;

        f();

        cout << "Program end" << endl;
        return 0;
}

Sonuçlar beklediğim gibi değildi. Statik nesne için yapıcı fonksiyon olarak ilk kez kadar çağrılmadı. İşte çıkış:

global variable created
local to main created
Program start
static variable created
Local variable created
Function executed
Local variable destroyed
Program end
local to main destroyed
static variable destroyed
global variable destroyed

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fufko

    fufko

    27 ŞUBAT 2006
  • lifeisforsharingDT

    lifeisforsha

    18 Mayıs 2011
  • MrMimoB

    MrMimoB

    11 NİSAN 2011