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

Cách biến cục bộ và toàn cục C++ được khởi tạo mặc định

Quy tắc giống nhau cho cả local và global variable. Khi khai báo biến, trình biên dịch gọi default constructor trừ khi bạn chỉ định khác.

Kiểu cơ bản (fundamental types)

Các kiểu cấp ngôn ngữ (int, float, bool, con trỏ, v.v.) có "default constructor" không làm gì cả – để bộ nhớ nguyên vẹn. Giá trị là indeterminate (khác xác định) – rác bộ nhớ.

  • Biến cục bộ (local): Giá trị rác (indeterminate). Đọc trước khi gán = Undefined Behavior.
  • Biến toàn cục / static: Được zero-initialized tự động trước mọi khởi tạo khác (trở thành 0, nullptr, false).

Class type

  • Class không có constructor → compiler sinh default constructor gọi default constructor của từng member.
  • Class có constructor có tham số nhưng không có default constructor → lỗi biên dịch nếu khai báo không initializer.
  • Member không có initializer trong class definition → default initialize (rác cho fundamental, default constructor cho class member).

Best practice: Luôn khởi tạo

int a = 0;           // Tốt
int b{};             // Value initialization (C++11) → 0
int c{42};           // Direct list initialization
MyClass obj;         // Gọi default constructor
MyClass obj{};       // Value initialization (an toàn hơn)
MyClass obj{args};   // Constructor với tham số

Quy tắc nhớ: Global/static = 0 tự động. Local = rác (trừ dùng {}). Luôn khởi tạo tường minh!