在C++语言中,mutable是C++语言中的关键字,可以修饰一个成员变量,就像static,const等修饰一个变量一样(注意:如果一个结构体或者是类的成员变量被static或者const修饰的话,则不可以再用mutable来修饰,否则回报编译错误)。一般情况下,如果一个函数、对象等被const 修饰,那么它将无法修改其成员变量的值,但是如果这个成员变量是被mutable修饰而又不被static或const修饰的话,则该成员变量的值也可以被修改。
例如:
#include <iostream>
using namespace std;
class Student
{
public:
Student(int stuNumber) : studentNumber(stuNumber) {};
void SetStudentNumber(int stuNumber) const throw() { this->studentNumber = stuNumber; };
void PrintStudentNumber() const throw() { cout << "studentNumber: " << this->studentNumber << endl; };
{
public:
Student(int stuNumber) : studentNumber(stuNumber) {};
void SetStudentNumber(int stuNumber) const throw() { this->studentNumber = stuNumber; };
void PrintStudentNumber() const throw() { cout << "studentNumber: " << this->studentNumber << endl; };
private:
mutable int studentNumber; //如果studentNumber前面还有static 或者const修饰或者没有mutable修饰,则会编译出错。
};
mutable int studentNumber; //如果studentNumber前面还有static 或者const修饰或者没有mutable修饰,则会编译出错。
};
int main()
{
const Student student(13);
student.PrintStudentNumber();
student.SetStudentNumber(19);
student.PrintStudentNumber();
student.PrintStudentNumber();
student.SetStudentNumber(19);
student.PrintStudentNumber();
system("pause");
return 0;
return 0;
}
//本例子中mutable的作用,就是能够在const成员函数中,使用非const的QMutex进行互斥。
//本例子中mutable的作用,就是能够在const成员函数中,使用非const的QMutex进行互斥。
class Counter
{
public:
Counter() { n = 0; }
void increment() { QMutexLocker locker(&mutex); ++n; }
void decrement() { QMutexLocker locker(&mutex); --n; }
int value() const { QMutexLocker locker(&mutex); return n; }
private:
mutable QMutex mutex;
int n;
};
QMutexLocker类在构造函数中自动对mutex进行加锁,在析构函数中进行解锁。随便一提的是,mutex使用了mutable关键字来修饰,因为我们在value()函数中对mutex进行加锁与解锁操作,而value()是一个const函数。