类的static成员变量能用const成员函数修改吗

dshzhou 2009-11-27 08:36:58
类的static成员变量能用const成员函数修改吗?为什么呢?举例说明.
[我知道的是const成员函数可以修改mutable的成员变量]

...全文
402 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
曾参 2012-08-16
  • 打赏
  • 举报
回复
5楼的点评很精彩,谢谢了。
dshzhou 2009-11-28
  • 打赏
  • 举报
回复
请具体说明一下原因,或者在某本书上提到了.
与用mutable的区别?

3#楼的好像不对.
fanchangyong 2009-11-28
  • 打赏
  • 举报
回复
原因是这样滴:
成员函数都会在自己的形参表中加一个参数:这个参数是指向函数所在类的类型的CONST指针.比如:
class A
{
private:
int n;
public:
void set()
{
n=10;
};
};

上边的set函数,是给n赋值的,但是它怎么知道是给哪一个对象的n赋值呢?这就需要在参数中告诉它。编译器为我们作了这些工作。实际生成的set函数可以理解成这样的:
public A::set(A* const this)
{
this-〉n=10;
}
而我们调用的时候其实是这样的:

A a;
A::set(&a);

理解这个对你理解你的这个问题很关键.如果是const成员函数,编译器所作的这项工作也会改变。它会生成一个指向cosnt对象的const指针。所以你不能通过this来改变它所指向的对象。但是要知道static对象并不需要this指针来改变,所以它和const函数是没关系的。

以上内容,仅代表个人观点。
wangguang246 2009-11-27
  • 打赏
  • 举报
回复
可以的,比如:

static int temp=1;
const int Fun1()
{
temp=2;//这是可以的
return temp;
}
BUt
int Fun1()const
{
temp=2;//这是不可以的
return temp;
}
昵称很不好取 2009-11-27
  • 打赏
  • 举报
回复
#include <iostream> 
using namespace std;

class A{
private:
static int i;
public:
void set(int x)const;
void get(){
cout<<i<<endl;
}
};
void A::set(int x)const{
i = x;
}
int A::i = 10;

int main(){
A a;
a.set(100);
a.get(); //output:100

return 0;
}
飞天御剑流 2009-11-27
  • 打赏
  • 举报
回复
当然能。因为静态数据成员的定义不在类体内,在静态存储区。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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