面试题答案
一键面试-
mutable关键字作用:在const成员函数中,mutable关键字允许修改被其修饰的成员变量,即使该函数被声明为const。通常情况下,const成员函数不能修改对象的成员变量,以保证对象状态的常量性。但有时我们希望在const成员函数中能修改某些特定的成员变量,mutable关键字就提供了这种机制,且不破坏const成员函数状态保护的基本语义,即不影响对象的“逻辑常量性”。
-
示例代码:
#include <iostream>
#include <string>
class Logger {
public:
Logger(const std::string& name) : loggerName(name), accessCount(0) {}
// const成员函数
void logMessage(const std::string& message) const {
std::cout << "[" << loggerName << "] " << message << " (Accessed " << accessCount << " times)" << std::endl;
++accessCount;
}
private:
std::string loggerName;
// 使用mutable修饰,允许在const成员函数中修改
mutable int accessCount;
};
你可以这样使用这个类:
int main() {
Logger logger("MainLogger");
logger.logMessage("Hello, world!");
logger.logMessage("This is a test.");
return 0;
}
在上述代码中,logMessage
是一个const成员函数,accessCount
被mutable
修饰,因此可以在logMessage
函数中被修改。而loggerName
没有被mutable
修饰,在logMessage
函数中不能被修改,从而保持了对象的逻辑常量性。