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

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

Chỉ định lớp lưu trữ mutable chỉ được sử dụng trên thành viên dữ liệu của class để làm cho nó có thể sửa đổi được, ngay cả khi thành viên đó là một phần của đối tượng được khai báo là const. Bạn không thể sử dụng mutable với các tên được khai báo là static hoặc const, hoặc các thành viên tham chiếu (reference).

Ví dụ minh họa

class A {
public:
    A() : x(4), y(5) { };
    mutable int x;
    int y;
};

int main() {
    const A var2;
    var2.x = 345;    // Hợp lệ vì x được khai báo mutable
    // var2.y = 2345; // Lỗi biên dịch: y không thể sửa đổi vì var2 là const
}

Giải thích: Biên dịch sẽ không cho phép gán var2.y = 2345 vì var2 được khai báo là const. Tuy nhiên, biên dịch sẽ cho phép gán var2.x = 345 vì A::x đã được khai báo là mutable.

Ứng dụng thực tế: mutable thường dùng cho các biến cache, bộ đếm truy cập, hoặc khóa mutex trong các phương thức const – nơi logic bên ngoài đối tượng không thay đổi nhưng trạng thái nội bộ cần cập nhật.