1.mutable 的核心用法 2.mutable 的使用限制 1.mutable 的核心用法 1 ) . 回顾: const 成员函数的默认规则, 类的const 成员函数中, 默认不能修改任何普通的成员变量#include <iostream> #include <string> using namespace std ; class Person { private : string name; int access_count; // 访问计数:记录getName被调用的次数 public : Person ( string n) : name ( n) , access_count ( 0 ) { } // const成员函数:默认不能修改成员变量 string getName ( ) const { access_count++ ; // 错误!const函数不能修改普通成员变量 return name; } } ; int main ( ) { const Person p ( "Alice" ) ; cout<< p. getName ( ) << endl; return 0 ; } 2 ) . mutable的核心用法: 豁免const 函数的修改限制, 给access_count加上mutable修饰后, 就能在const 成员函数中修改它#include <iostream> #include <string> using namespace std ; class Person { private : string name; mutableint access_count; // mutable修饰:允许const函数修改 public : Person ( string n) : name ( n) , access_count ( 0 ) { } // const成员函数:可以修改mutable变量 string getName ( ) const { access_count++ ; // 合法!mutable变量不受const限制 cout<< "getName被调用了 " << access_count<< " 次" << endl; return name; } // 获取访问计数(辅助函数) int getCount ( ) const { return access_count; } } ; int main ( ) { const Person p ( "Alice" ) ; // const对象,只能调用const成员函数 cout<< p. getName ( ) << endl; // 输出:getName被调用了 1 次 → Alice cout<< p. getName ( ) << endl; // 输出:getName被调用了 2 次 → Alice cout<< "总调用次数:" << p. getCount ( ) << endl; // 输出:2 return 0 ; } 2.mutable 的使用限制 a. "只能修饰类的非静态成员变量" : 不能修饰全局变量, 局部变量, 函数参数, 静态成员变量( static ) , const 变量
b. 线程安全: 如果mutable变量被多线程访问, 需要手动加锁( const 函数不保证线程安全)