Sobes.tech
Junior

Кай ва қачон ва чанд муддат тағйирёбҳои глобалӣ ва маҳаллии C++ мавҷуданд?

sobes.tech AI

Ҷавоб аз AI

Глобалии тағамдар

  • Мөчлөө: Программыг эхлүүлснээс дуусах хүртэл.
  • Хадгалах газар: Ерөнхийдөө статик санах ойд (.data эсвэл .bss хэсэгт гүйцэтгэх файлын).
  • Эхлүүлэх:
    • Файлын түвшинд тодорхойлсон статик бус глобал хувьсагчууд, нарийн бүтэцтэй конструкторуудтай, main()-г дуудсангаас өмнө эхлүүлнэ.
    • Тэгийн эхлүүлэлт: жишээ нь, int i = 0; зэрэг хувьсагчид main()-г дуудсангаас өмнө эхлүүлнэ.
    • const эсвэл статик хугацаатай хувьсагчид програмыг ачаалж эхлэх үед эхлүүлнэ.
  • Хүрээ: Бүх функцүүдэд харагдана, харагдах хүрээ дотор.

Орон нутгийн хувьсагчид

  • Мөчлөө: Хувьсагч тодорхойлсон цэгээс эхлэн, энэ цэгээс гарах хүртэл.
  • Хадгалах газар: Ерөнхийдөө стек дээр (автомат хувьсагчид). Статик орон нутгийн хувьсагчид статик санах ойд хадгалагдана.
  • Эхлүүлэх:
    • Автомат орон нутгийн хувьсагчид анхдагчаар эхлүүлдэггүй ("хог" агуулсан). Тодорхойлох шаардлагатай.
    • Статик орон нутгийн хувьсагчид анх удаа хүрч, эхлүүлнэ.
  • Хүрээ: Зөвхөн тодорхойлсон цэгийн дотор харагдана.

Жишээ

// Глобал хувьсагч
int global_variable = 10;

void some_function() {
    // Орон нутгийн хувьсагч (автомат)
    int local_variable_1; // Эхлүүлээгүй

    // Орон нутгийн хувьсагч (автомат) эхлүүлсэн
    int local_variable_2 = 20;

    // Статик орон нутгийн хувьсагч
    static int static_local_variable = 30; // Нэг удаа эхлүүлнэ

    // Глобал хувьсагчид хандах
    global_variable++;

    // Орон нутгийн хувьсагчид хандах
    local_variable_1 = global_variable;
    static_local_variable++;
}

int main() {
    some_function();
    some_function(); // static_local_variable үнэ цэнээ хадгалсан
    // Глобал хувьсагч энд хүртээмжтэй
    // local_variable_1 ба local_variable_2 хүртээмжгүй

    return 0;
}

Харьцуулсан хүснэгт

Онцлог Глобал хувьсагчид Орон нутгийн хувьсагчид (автомат) Статик орон нутгийн хувьсагчид
Мөчлөө Програм эхлүүлснээс дуусах хүртэл Тодорхойлолтоос гарах хүртэл Тодорхойлолтод анх хүрсэнээс эхлэн төгсгөл хүртэл
Хадгалах газар Статик санах ой (.data, .bss) Стек Статик санах ой (.data, .bss)
Эхлүүлэх main()-г дуудсангаас өмнө эсвэл програм ачаалж эхлэхэд Анхдагчаар эхлүүлдэггүй. Тодорхойлох шаардлагатай Нэг удаа анх хүрсэн үед эхлүүлнэ
Хүрээ Файл доторх бүх функцэд харагдана Зөвхөн тодорхойлсон цэг дотор харагдана Зөвхөн тодорхойлсон цэг дотор харагдана