歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++ 關鍵詞 mutable

C++ 關鍵詞 mutable

日期:2017/3/1 9:59:51   编辑:Linux編程

mutable關鍵詞的作用:被它修飾的成員變量,即使在常函數中也可以被更改。

mutable適用場合主要有以下兩種,使用前要三思。

•有一個常量成員函數,但是出於調試目的,想要跟蹤常函數被調用的次數。注意如果你正在考慮使用mutable變量,那就會違反常量語義,所以請三思而後行。

class Employee {
public:
Employee(const std::string & name)
: _name(name), _access_count(0) { }
void set_name(const std::string & name) {
_name = name;
}
std::string get_name() const {
_access_count++;
return _name;
}
int get_access_count() const { return _access_count; }

private:
std::string _name;
mutable int _access_count;
}

•一個更復雜的例子,有時候可能需要緩存一個復雜操作的結果。

class MathObject {
public:
MathObject() : pi_cached(false) { }
double pi() const {
if( ! pi_cached ) {
/* This is an insanely slow way to calculate pi. */
pi = 4;
for(long step = 3; step < 1000000000; step += 4) {
pi += ((-4.0/(double)step) + (4.0/((double)step+2)));
}
pi_cached = true;
}
return pi;
}
private:
mutable bool pi_cached;
mutable double pi;
};

只有pi()第一次被訪問時才計算pi的值,計算出pi的值後,就保存起來,並且這個值是固定的,這樣對於需要大量計算得出一個固定值的操作,就只需執行一次,而邏輯上這個函數依然是常函數。

Copyright © Linux教程網 All Rights Reserved