mutable到底是什么意思?看糊涂了。

jzk_sherlock 2002-04-30 08:19:21
mutable到底是什么意思?看糊涂了。
...全文
1200 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzk_sherlock 2002-05-12
  • 打赏
  • 举报
回复
??
jzk_sherlock 2002-05-12
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>//for string type

using namespace std;

class A
{
public:
A(int k=0):data(k){}
void setdata(int k);
void print(void) const;
private:
mutable int data;
};

void A::setdata(int k)
{
data = k;
}

void A::print(void) const
{
cout << data << endl;
}

int main()
{
const A k;
k.setdata(453452);
k.print();

return 0;
}

这段程序,运行报错,而我把member function setdata()改成const反而好了,为什么???
jzk_sherlock 2002-05-12
  • 打赏
  • 举报
回复
gz
ajoo 2002-05-12
  • 打赏
  • 举报
回复
if your data is not mutable, setdata cannot be declared "const"
zosatapo 2002-05-12
  • 打赏
  • 举报
回复
说简单一点就是这样的:
我们可以认为mutable的变量是类的辅助状态,但是只是起到类的一些方面表述的功能,修改他的内容我们可以认为对象的状态本身并没有改变的。

实际上由于const_cast的存在,这个概念很多时候用处不是很到了。

mutable变量的典型例子就是我们一类:
class Test
{
private:
int curpos;
int value[100];
public:
/*operations*/
};
其中curpos表示当前内部数组当前元素的位置信息
,我们就可以把这个变量声明为mutable,因为curpos改变了,
我们因为数组本身实际并没有改变的,所以我们可以认为对象状态也没有改变的。

这个就象你处于地球上不同的位置,但是你还是你并没有发生本质的改变的。
jzk_sherlock 2002-05-12
  • 打赏
  • 举报
回复
我以为mutable的变量,不管怎样都能改,原来是这样哦。让我再想想
Kaye 2002-05-12
  • 打赏
  • 举报
回复
当然会出错:
const A k;//这表明k是一个const对象;你只能调用k的const member function
所以setdata()改成const 才好了!
去掉const A k;中的const估计就不会出错了
jzk_sherlock 2002-05-12
  • 打赏
  • 举报
回复
no sense, i certainly know that.anyhow thanks.
ccmouse 2002-05-11
  • 打赏
  • 举报
回复
当然,mutable的作用是寻求一种安全的type system。可能没做过什么大工程,还不能体会其用意吧。不过总的来说,这个关键词并未起到重要的角色。
ajoo 2002-05-10
  • 打赏
  • 举报
回复
no. const has two semantics:
1. const in implementation. which means you don't change any member variable.
2. const in observable behavior, which means you may change some internal state, but the execution of this method would not affect the observable behavior. Example would be like caching (as ccmouse said)
But that's not for good-looking. It's for a safer type system.

For the second case, you may need mutable variable.
jzk_sherlock 2002-05-10
  • 打赏
  • 举报
回复
规定在const的函数中只能使用const的变量??????

好像没报错呵。
ccmouse 2002-05-10
  • 打赏
  • 举报
回复
mutable member variable就是在const member function中也能修改的变量。
比如,你的类要格式化一个输出,第一次算了许久,最后把它放入成员buffer,在这样的情况下,用const修饰print(),mutable修饰buffer,比较美观。
我也觉得只是美观而已。
jzk_sherlock 2002-05-10
  • 打赏
  • 举报
回复
?
xiesl 2002-05-08
  • 打赏
  • 举报
回复
你要保证其他的变量不被改变啊,规定在const的函数中只能使用const的变量,如果你要用非const的变量,必须声明为mutable,这样编译器不会提示出错,如果不这样声明,就会出错
如果你不用const 声明函数,那你怎么样使用变量都不会出错,可以随意修改变量,是不是觉得不安全呢
jzk_sherlock 2002-05-07
  • 打赏
  • 举报
回复
语法上的意思,我都知道。可是实际用途呢,既然你写的是mutable,那么你function不const不就好了?何必呢、
albertjin123 2002-05-03
  • 打赏
  • 举报
回复
MSDN:
---------------------------------------
mutable member-variable-declaration;

This keyword can only be applied to non-static and non-const data
members of a class. If a data member is declared mutable, then it
is legal to assign a value to this data member from a const member
function.
ajoo 2002-05-03
  • 打赏
  • 举报
回复
const means you cannot change the state of the object.
state means all the values of the members in that object.

While in some special cases, you don't consider a member in an object as part of the state(it may be just for temporary storage, or the change of it does not change the observable behavior of your object) you may declare it as mutable.
jzk_sherlock 2002-05-03
  • 打赏
  • 举报
回复
?
jzk_sherlock 2002-04-30
  • 打赏
  • 举报
回复
有什么意义呢?何必
solrac 2002-04-30
  • 打赏
  • 举报
回复
不受const限制。
加载更多回复(1)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧