MST

星途 面试题库

面试题:C++中mutable关键字与const成员函数状态保护

已知C++中有mutable关键字,在const成员函数状态保护的场景下,mutable关键字有什么作用?请通过一个具体的类,展示如何合理使用mutable关键字,同时又不破坏const成员函数状态保护的基本语义。
26.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. mutable关键字作用:在const成员函数中,mutable关键字允许修改被其修饰的成员变量,即使该函数被声明为const。通常情况下,const成员函数不能修改对象的成员变量,以保证对象状态的常量性。但有时我们希望在const成员函数中能修改某些特定的成员变量,mutable关键字就提供了这种机制,且不破坏const成员函数状态保护的基本语义,即不影响对象的“逻辑常量性”。

  2. 示例代码

#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成员函数,accessCountmutable修饰,因此可以在logMessage函数中被修改。而loggerName没有被mutable修饰,在logMessage函数中不能被修改,从而保持了对象的逻辑常量性。