`
v5browser
  • 浏览: 1134355 次
社区版块
存档分类
最新评论

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的值后,就保存起来,并且这个值是固定的,这样对于需要大量计算得出一个固定值的操作,就只需执行一次,而逻辑上这个函数依然是常函数。
分享到:
评论

相关推荐

    聊聊C++的mutable和volatile

    C++中修饰数据可变的关键字有三个:const、volatile和mutable。const比较好理解,表示其修饰的内容不可改变(至少编译期不可改变),而volatile和mutable恰好相反,指示数据总是可变的。mutable和volatile均可以和...

    详解C++中mutable的用法

    主要介绍了详解C++中mutable的用法,帮助大家更好的理解和学习C++,感兴趣的朋友可以了解下

    c++关键字mutable深入解析

    先说用法,mutable关键字只能修饰非静态以及非常量成员变量,使用mutable修饰的成员变量在const函数中的值是可以修改的

    C++中mutable与volatile的深入理解

    C++中修饰数据可变的关键字有三个:const、volatile和mutable。const比较好理解,表示其修饰的内容不可改变(至少编译期不可改变),而volatile和mutable恰好相反,指示数据总是可变的。mutable和volatile均可以和...

    深入解析C++中的mutable关键字

    在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中

    深入理解C++中的mutable关键字

     在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。  我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成...

    浅谈C++中的mutable和volatile关键字

    在C++中,mutable是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中,甚至结构体变量或者类对象为const,其mutable成员也可以被修改。mutable在类中只能够修饰非...

    C++中volatile和mutable关键字用法详解

    主要介绍了C++中volatile和mutable关键字用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    C++基本功:全面掌握const、volatile和mutable关键字.docx

    C++基本功:全面掌握const、volatile和mutable关键字

    Practical C++ Programming C++编程实践

    : Construct The Comma Operator Overloading the ( ) Operator Pointers to Members The asm Statement The mutable Qualifier Run Time Type Identification Trigraphs Answers to Chapter Questions 30....

    volatile关键字 Const关键字 static关键字 mutable 关键字

    C/C++ 嵌入式 一些关键字: volatile关键字 Const关键字 static关键字 mutable 关键字

    More Effective C++中文版

    一些经过验证的用来改善程序效率的方法,包括检验C++... 介绍新的语言特性,包括bool、mutable、explicit、namespaces、成员模板、标准模板库等。如果你的编译器不支持这些特性,本书还介绍了如何不利用它们完成工作。

    More Effective C++.pdf 高清 目录

    本书所给出的建议都是源于日常编程实践的一些真知灼见。和它的姊妹篇《Effective C++》一样,本书是每个C++开发者必不可少的书籍。  作者Meyers在本书中为... 从实用的角度介绍新的语言特性,包括bool、mutable、...

    more effective c++

    一些经过验证的用来改善程序效率的方法,包括检验C++..., 介绍新的语言特性,包括bool、mutable、explicit、namespaces、成员模板、标准模板库等。如果你的编译器不支持这些特性,本书还介绍了如何不利用它们完成工作。

Global site tag (gtag.js) - Google Analytics