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

Các lớp lưu trữ (Storage Classes) của biến trong C++

Storage class** định nghĩa scope (phạm vi) và lifetime (vòng đời) của biến/hàm trong chương trình C++. Các specifier đứng trước kiểu họ sửa đổi. Có 5 storage class:

  • auto
  • register
  • static
  • extern
  • mutable

Chi tiết từng lớp

1. auto

C: khai báo biến automatic storage (mặc định trong block). Biến hủy khi thoát block. Thường thừa thãi.
C++11: suy diễn kiểu tự động từ initializer (auto x = 42; → int).

2. register

C: gợi ý compiler lưu biến trong register CPU (tối ưu tốc độ). Compiler có thể bỏ qua. Hiếm khi dùng.
C++: Từ khóa dự trữ không dùng, giữ để tương thích C. C++17 deprecated.

3. static

  • Biến cục bộ: Tồn tại suốt vòng đời chương trình, giữ giá trị giữa các lần gọi hàm. 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: Chia sẻ 1 bản sao cho tất cả đối tượng.

4. extern

Khai báo đối tượng dùng chung cho nhiều file nguồn. Không định nghĩa, chỉ khai báo. Định nghĩa thực tế ở một file khác.

// header.h
extern int globalVar;

// file1.cpp
int globalVar = 42;  // Định nghĩa

// file2.cpp
#include "header.h"
void use() { globalVar++; }  // S dụng chung

5. mutable

Chỉ dùng cho thành viên dữ liệu class. Cho phép sửa đổi thành viên đó ngay khi đối tượng là const. Không dùng với static, const, reference member.

class A {
    mutable int cache;  // Có thể sửa trong const method
    int value;
public:
    int getValue() const {
        if (cacheValid) return cache;
        cache = compute();  // OK vì mutable
        cacheValid = true;
        return cache;
    }
};

Bảng tóm tắt

Storage Class Scope Lifetime Linkage
auto (C++11: type deduction) Block Block No linkage
register Block Block No linkage
static (local) Block Program No linkage
static (global) File Program Internal
extern File/Program Program External
mutable (member) Class Object N/A