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

Phạm vi biến (Scope of Variables) trong C++

Phạm vi (scope) là vùng chương trình mà biến được nhìn thấy. C++ có 3 loại chính:

1. Biến cục bộ (Local Variables)

  • Khai báo trong hàm hoặc khối { ... }.
  • Chỉ truy cập được trong khối đó.
  • Hủy khi ra khỏi khối (stack unwinding).
  • Không tự khởi tạo – giá trị rác nếu không gán.
int main() {
    int a = 10, b = 20; // cục bộ
    int c = a + b;
    cout << c; // 30
    return 0;
}

2. Biến toàn cục (Global Variables)

  • Khai báo ngoài mọi hàm (thường đầu file).
  • Truy cập được mọi nơi sau khai báo.
  • Sống suốt vòng đời chương trình.
  • Tự khởi tạo 0 (hoặc nullptr, '\0', 0.0...).
int g; // toàn cục, tự = 0
int main() {
    int a = 10, b = 20;
    g = a + b;
    cout << g; // 30
    return 0;
}

3. Trùng tên biến cục bộ & toàn cục

Biến cục bộ che khuất (shadow) biến toàn cục cùng tên trong phạm vi cục bộ.

int g = 20;
int main() {
    int g = 10; // cục bộ che toàn cục
    cout << g;  // in 10
    return 0;
}
10

Để truy cập toàn cục bị che: ::g (toán tử phạm vi toàn cục).

4. Tham số hàm (Function Parameters)

  • Coi như biến cục bộ của hàm.
  • Truyền bằng giá trị: copy, thay đổi không ảnh hưởng đối số.
  • Truyền bằng tham chiếu/con trỏ: sửa đổi đối số gốc.

Bảng khởi tạo mặc định

KiểuGiá trị mặc định (toàn cục/static)
int, short, long...0
float, double0.0
char'\0'
pointernullptr (NULL)
class/structdefault constructor

Biến cục bộ không có giá trị mặc định – phải tự khởi tạo.

Phạm vi khối (Block Scope) – C++17

if (int x = getValue(); x > 0) { /* x visible here */ }
// x không còn tồn tại
switch (int y = foo(); y) { case 1: ... }
// y không còn tồn tại

Khuyến nghị

  • Hạn chế biến toàn cục – dùng singleton, dependency injection, namespace.
  • Khởi tạo biến cục bộ ngay tại khai báo: int x = 0;.
  • Dùng const cho biến không thay đổi.
  • Ưu tiên phạm vi hẹp nhất có thể (RAII).