mutable là một trong các lớp lưu trữ (storage class) trong C++. Thành viên dữ liệu mutable là loại thành viên luôn có thể thay đổi. Ngay cả khi đối tượng là const. Khi cần chỉ một thành viên là biến còn lại là hằng, ta dùng mutable. Xem ví dụ để hiểu rõ.
Ví dụ mã C++
#include <iostream>
using namespace std;
class MyClass {
int x;
mutable int y;
public:
MyClass(int x=0, int y=0) {
this->x = x;
this->y = y;
}
void setx(int x=0) {
this->x = x;
}
void sety(int y=0) const { // hàm thành viên const, nhưng dữ liệu vẫn thay đổi
this->y = y;
}
void display() const {
cout << endl << "(x: " << x << " y: " << y << ")" << endl;
}
};
int main() {
const MyClass s(15, 25); // Đối tượng const
cout << endl << "Trước khi thay đổi: ";
s.display();
// s.setx(150); // Dòng này gây lỗi nếu bỏ comment
s.sety(250);
cout << endl << "Sau khi thay đổi: ";
s.display();
} Kết quả
[Error] passing 'const MyClass' as 'this' argument of 'void MyClass::setx(int)' discards qualifiers [-fpermissive]
Nếu bỏ dòng s.setx(150); thì:
Kết quả
Trước khi thay đổi: (x: 15 y: 25) Sau khi thay đổi: (x: 15 y: 250)