C++ 中的 mutable 关键字

C++ 中的 mutable 关键字

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

比如下面这个例子:

#include <iostream>
using namespace std;
class Test
{
public:
    Test();
    int value() const;

private:
    mutable int v;
};
Test::Test()
{
    v = 1;
}

int Test::value() const
{
    v++;
    return v;
}

int main()
{
    Test A;
    cout <<  A.value() << endl;
    return 0;
}

甚至于当 A 这个变量被声明 const 类型时 A.v 还是可以改变的。比如下面的代码。

int main()
{
    const Test A;
    cout <<  A.value() << endl;
    return 0;
}

相对来说,mutable 这个关键字用的地方不多。了解这些也就够了。

时间: 2024-12-29 23:49:16

C++ 中的 mutable 关键字的相关文章

深入理解C 中的mutable关键字

mutalbe的中文意思是“可变的,易变的”,跟constant(既C 中的const)是反义词. 在C 中,mutable也是为了突破const的限制而配置的.被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中. 我们知道,假如类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的.但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰. 下面是个小例子: class ClxTest

mutable 关键字

mutable 在C++中,mutable修饰成员变量也是为了突破const的限制而设置的.被mutable修饰的成员变量,将永远处于可变的状态,即使在一个const函数中. class a { mutable int a; int ab(int a) const; } 解释: const修饰成员函数:常量成员函数 这种成员函数不改变成员变量的值. 但被mutable 关键字修饰的成员变量,即使放在const成员函数里,它的值也可以被改变.

F#: mutable 关键字不适宜用于结构中声明可变值

关于之前日志<F#编译器的一个Bug>,有一个问题,Set函数既然运行正常,改变的值去哪里了?以下例子做出了解答: [<Struct>] type TestStruct = val mutable _x: int new(x) = {_x = x} member this.Set(x) = this._x <- x this member this.X with get() = this._x; let a = TestStruct(2) let c() = let b =

C++中的mutalbe关键字

mutalbe的中文意思是"可变的,易变的",跟constant(既C++中的const)是反义词. 在C++中,mutable也是为了突破const的限制而设置的.被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中. 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的.但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰. 下面是一个小例子: class

C++要点(1)mutable关键字

mutable语义 const语义 mutable和const的关系 mutable提供的灵活性 mutable语义 在C++中,mutable是为了突破const的限制而设置的. 被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中,甚至结构体变量或者类对象为const,其mutable成员也可以被修改. 例如: #include <iostream> class Tester { public: Tester(int x, int y) : a_normal(x),

C++ 类模板三(类模版中的static关键字)

//类模版中的static关键字 #include<iostream> using namespace std; /* 类模板本质上是c++编译器根据类型参数创建了不同的类, c++编译器在利用类模板生成类的时候会为每个类生成一个static变量 那么对于类中的static关键字就非常好理解了 static关键字修饰的变量是属于类的 同一个类的对象共享类的static静态变量 类模板中的static修饰的变量数据类型必须是确定的 不可以是类型参数 因为静态变量在类对象之前初始化 这时候还没有通

浅析Java中的final关键字

原文出处: 海子 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.下面是本文的目录大纲: 一.final关键字的基本用法 二.深入理解final关键字 若有不正之处,请多多谅解并欢迎指正. 一.final关键字的基本用法 在Java中,final关键字可以用来修饰类.方法和变量(包括成员变量和局部变量).下面就从这三个方面来了解一下final关键字

转载:浅析Java中的final关键字

文章转自:http://www.cnblogs.com/dolphin0520/p/3736238.html 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.下面是本文的目录大纲: 一.final关键字的基本用法 二.深入理解final关键字 若有不正之处,请多多谅解并欢迎指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cn

(转)Java中的static关键字解析

转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: "static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法.这实际上正是static方法的主要用途." 这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键