歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++ 關鍵詞 mutable

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