|
Mutable data members in C++ are those whose values can be changed at runtime, even if the object they belong to is declared as constant. This is the opposite of constant members, which cannot be modified once they are set.
In certain situations, logic may require some data members to be variable while others remain constant. The concept of mutability is especially helpful in managing such classes effectively.
Example
Here’s a practical example to illustrate the concept:
#include <iostream>
using namespace std;
class Test {
public:
int a;
mutable int b;
Test(int x=0, int y=0) {
a = x;
b = y;
}
void seta(int x=0) {
a = x;
}
void setb(int y=0) {
b = y;
}
void disp() const {
cout << endl << "a: " << a << " b: " << b << endl;
}
};
int main() {
const Test t(10, 20);
cout << t.a << " " << t.b << "\n";
// t.a = 30; // Error: 'a' cannot be changed because the object is constant.
t.b = 100; // 'b' can still be changed because it is mutable.
cout << t.a << " " << t.b << "\n";
return 0;
}
In this example, the class `Test` contains two data members: `a` and `mutable int b`.
The `mutable` keyword allows `b` to be modified even when the object `t` is declared as `const`.
When attempting to modify `a`, an error occurs because `a` is not mutable and the object is constant.
However, `b` can still be changed due to its mutable nature.
This demonstrates how mutable data members can be used to manage class data effectively while preserving the const-correctness of the object's interface.
Comments
Post a Comment