Rumah > pembangunan bahagian belakang > C++ > Bilakah pembolehubah statik peringkat fungsi dalam C dimulakan?

Bilakah pembolehubah statik peringkat fungsi dalam C dimulakan?

Linda Hamilton
Lepaskan: 2024-11-15 09:39:03
asal
332 orang telah melayarinya

When are function-level static variables in C   initialized?

Permulaan Pembolehubah Statik Tahap Fungsi

Dalam C, pembolehubah statik peringkat fungsi ialah mekanisme yang berguna untuk mengekalkan keadaan dalam fungsi. Walau bagaimanapun, proses peruntukan dan permulaannya kadangkala menimbulkan persoalan.

Tidak seperti pembolehubah yang diisytiharkan secara global, yang diperuntukkan dan dimulakan pada permulaan program, pembolehubah statik peringkat fungsi tidak diperuntukkan atau dimulakan sehingga fungsi dipanggil buat kali pertama .

Pertimbangkan coretan kod berikut:

void doSomething()
{
  static bool globalish = true;
  // ...
}
Salin selepas log masuk

Dalam contoh ini, pembolehubah statik globalish tidak akan diperuntukkan atau dimulakan sehingga fungsi doSomething() digunakan. Untuk menunjukkan ini, mari kita menganalisis program ujian:

#include <iostream>

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

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

  std::string _name;
};

test t("global variable");

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

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

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

  std::cout << "Program start" << std::endl;

  f();

  std::cout << "Program end" << std::endl;
  return 0;
}
Salin selepas log masuk

Setelah penyusunan dan pelaksanaan, output mendedahkan bahawa pembina untuk pembolehubah statik t dalam fungsi f() tidak dipanggil sehingga fungsi itu dipanggil untuk kali pertama:

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
Salin selepas log masuk

Oleh itu, pembolehubah statik peringkat fungsi tidak diperuntukkan atau dimulakan pada permulaan program, sebaliknya pada pemanggilan pertama fungsi di mana ia ditakrifkan.

Atas ialah kandungan terperinci Bilakah pembolehubah statik peringkat fungsi dalam C dimulakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan