Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Lớp lưu trữ static trong C++

Lớp lưu trữ static hướng dẫn trình biên dịch giữ một biến cục bộ tồn tại suốt vòng đời của chương trình thay vì tạo và hủy nó mỗi khi vào/ra khỏi phạm vi. Do đó, biến cục bộ static giữ nguyên giá trị giữa các lần gọi hàm.

Bộ sửa đổi static cũng có thể áp dụng cho biến toàn cului. Khi làm vậy, nó giới hạn phạm vi của biến đó chỉ trong file nơi nó được khai báo (liên kết nội bộ - internal linkage).

Trong C++, khi static được dùng trên thành viên dữ liệu của class, nó khiến chỉ có một bản sao của thành viên đó được chia sẻ bởi tất cả các đối tượng của class đó.

Ví dụ minh họa

#include <iostream>

void func(void) {
    static int i = 10;  // Biến cục bộ static
    i++;
    std::cout << "i is " << i;
    std::cout << " and count is " << count << std::endl;
}

static int count = 6;  // Biến toàn cục static (liên kết nội bộ)

int main() {
    while(count--) {
        func();
    }
}

Kết quả đầu ra

i is 11 and count is 5
i is 12 and count is 4
i is 13 and count is 3
i is 14 and count is 2
i is 15 and count is 1
i is 16 and count is 0

Giải thích:

  • Biến i trong func() được khởi tạo một lần duy nhất (lần đầu gọi hàm) và giữ giá trị qua các lần gọi sau.
  • Biến count là toàn cục static, chỉ nhìn thấy trong file này.
  • Vòng lặp chạy 6 lần (từ 5 xuống 0), mỗi lần i tăng 1.

Tóm tắt 3 trường hợp dùng static

Ngữ cảnh Hiệu quả
Biến cục bộ trong hàm Giữ giá trị giữa các lần gọi, khởi tạo 1 lần
Biến toàn cục Giới hạn phạm vi trong file (internal linkage)
Thành viên class (static member) Chia sẻ 1 bản sao cho tất cả đối tượng của class