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

Khác biệt giữa biến static, auto, global và local trong C++


Có hai khái niệm riêng biệt:

  • Phạm vi (scope) – quyết định nơi tên có thể truy cập: global và local.
  • Thời gian lưu trữ (storage duration) – quyết định khi nào biến được tạo/hủy: static và auto.

Phạm vi

Biến cục bộ chỉ dùng được bên trong hàm/khối. Biến toàn cục định nghĩa ngoài mọi hàm, truy cập được mọi nơi.

Ví dụ cục bộ

#include <iostream>
using namespace std;
int main() {
    int a = 10, b = 20, c = a + b;
    cout << c;
    return 0;
}

Đầu ra: 30

Ví dụ toàn cục

#include <iostream>
using namespace std;
int g;
int main() {
    int a = 10, b = 20;
    g = a + b;
    cout << g;
    return 0;
}

Đầu ra: 30

Thời gian lưu trữ

Automatic (auto): biến cục bộ, vòng đời kết thúc khi rời khỏi phạm vi, tạo lại khi vào lại phạm vi.

for (int i = 0; i < 5; ++i) {
    int n = 0;
    printf("%d ", ++n); // in 1 1 1 1 1 - giá trị cũ mất đi
}

Static: vòng đời kéo dài đến hết chương trình. Nếu là biến cục bộ, giá trị persists khi rời phạm vi.

for (int i = 0; i < 5; ++i) {
    static int n = 0;
    printf("%d ", ++n); // in 1 2 3 4 5 - giá trị lưu lại
}

Lưu ý: từ khóa static còn nhiều nghĩa khác. Từ C++11, auto không còn nghĩa là automatic storage duration mà là suy diễn kiểu tự động từ khởi tạo.