mutable关键词的作用。
时间: 2023-09-16 10:08:05 浏览: 41
`mutable` 关键字用于修饰类的非常量成员变量。默认情况下,类的非常量成员变量在类实例化后不能被修改,但是使用 `mutable` 关键字修饰的成员变量可以在 `const` 成员函数内被修改。这样做的目的是为了允许 `const` 成员函数修改一些状态变量,而不影响对象的常量属性。
例如,假设有一个 `class` 定义如下:
```c++
class MyClass {
public:
void foo() const; // const 成员函数
private:
mutable int x; // 使用 mutable 关键字修饰的成员变量
};
```
`foo()` 函数被声明为 `const` 成员函数,表示该函数不会修改类对象的任何非静态成员变量,包括 `x`。但是如果我们需要在 `foo()` 函数中修改 `x`,我们可以使用 `mutable` 关键字修饰 `x`,使其可以在 `foo()` 中被修改,而不违反 `const` 成员函数的要求。
```c++
void MyClass::foo() const {
x = 0; // 使用 mutable 关键字修饰的成员变量可以在 const 成员函数中被修改
}
```
相关问题
mutable c++
C++中的可变(mutable)关键字用于修饰类的成员变量,使其能够在常量成员函数中被修改。默认情况下,常量成员函数不允许修改类的成员变量,但是通过使用mutable关键字,可以在常量成员函数中修改被mutable修饰的成员变量。
下面是一个示例,演示了如何在C++中使用mutable关键字:
```cpp
class Example {
public:
Example() : count(0) {}
void increment() const {
mutableCount++; // 在常量成员函数中修改mutableCount
}
int getCount() const {
return count;
}
private:
mutable int mutableCount; // 使用mutable修饰的成员变量
int count;
};
int main() {
Example obj;
obj.increment();
int count = obj.getCount(); // 返回1,因为在常量成员函数中修改了mutableCount
return 0;
}
```
在上面的示例中,我们定义了一个名为Example的类,其中包含一个使用mutable修饰的成员变量mutableCount。在常量成员函数increment()中,我们可以修改mutableCount的值。在主函数中,我们创建了一个Example对象obj,并调用increment()函数来增加mutableCount的值。最后,我们调用getCount()函数来获取mutableCount的值,返回1。
c++ mutable
在 C++ 中,关键字 `mutable` 用于修饰成员变量,它的作用是允许被修饰的成员变量在 const 成员函数中被修改。
在一个 const 成员函数中,所有的成员变量都不能被修改,但如果某个成员变量被声明为 mutable,那么它在 const 成员函数中就可以被修改。
下面是一个示例:
```
class MyClass {
public:
void constFunc() const {
// 可以读取不可修改的成员变量
int a = m_a;
// 但不能修改成员变量 m_a
// 如果 m_b 被声明为 mutable,那么就可以修改
m_b = 10;
}
private:
int m_a;
mutable int m_b;
};
```
需要注意的是,mutable 成员变量的修改只能在 const 成员函数中进行,而在非 const 成员函数中,所有的成员变量都可以被修改,无论是否被声明为 mutable。