C++类的指针函数和const函数

xiehui888 2008-04-18 08:45:23
对于指针函数的声明小弟一直很头疼,简单的还能够理解
复杂的我就晕呼呼了
还有我想知道类的const函数内为什么不能够修改类成员的值!
...全文
219 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
herman~~ 2008-04-19
  • 打赏
  • 举报
回复
函数指针
int (*fun)(int,int); 返回值,参数,没啥特别

const为啥不能修改变量值,这个C++ PRIMER解释得很清楚
非静态成员函数会带this指针,指向对象地址。如果函数声明为const 则把this指向为常量,相当于你定义 int i ; const int * pI = i; pI指向的变量值不允许你修改
Walker-cheng 2008-04-19
  • 打赏
  • 举报
回复
const成员函数是编译器在编译时做了处理
Maxwell 2008-04-19
  • 打赏
  • 举报
回复
const成员函数的要求就是不能修改对象的状态,所以一般的成员变量是不允许修改的,但是有时候成员变量的改变从外面看不会影响对象的状态(比如用于缓存的成员变量),那么可以在定义的时候在前面加上mutable,那就可以在const函数中修改了。
悠悠长风 2008-04-19
  • 打赏
  • 举报
回复
你要是想在const函数中修改类成员,可以把该类成员加一个mutable声明。
solo_coder 2008-04-19
  • 打赏
  • 举报
回复
在能用const的地方,尽量使用const,
能提高代码的可读性和维护性。
我是风 2008-04-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 akirya 的回复:]
类的const函数内为什么不能够修改类成员的值!
这是规定
[/Quote]
whvcliker 2008-04-19
  • 打赏
  • 举报
回复
LZ的第一个问题问得不太清楚,太大,无法回答,如果对函数指针感兴趣,有不少书讲到了,可心查查
对于第二个问题,原因很简单:
这涉及到语言哲学,const的语义是,不能改变,对于函数而言,如何保证这个语义?
当然,C++里对于成员函数,参数会由系统带入一个const this指针,这样,在内部使用时,引用的是一个const类指针,自然就修改不了成员。
这里可作个试验:
class CTest
{
private:
int m_iData;
public:
int get_data(void) const
{
CTest* pTest = const_cast<CTest*>(this);// 这里只是做试验,请不要在实际代码中使用
pTest->m_iData = 3;
return m_iData;
}

CTest()
: m_iData(1)
{}
};

int
main ()
{
CTest test;
int data = test.get_data();// 这里的值是多少呢?
return 0;
}
rushman 2008-04-18
  • 打赏
  • 举报
回复
规定的背后还是有原因的。
当访问一个 const 对象的时候,const 函数可以调用,非 const 函数就不能调用,以避免修改 const 对象的数据。那么不允许 const 函数修改成员值就很好理解了。
zpk1234 2008-04-18
  • 打赏
  • 举报
回复
const函数 不能修改this指针, 而成员变量是通过this指针取得的
如m_iMember是通过this->m_iMember索引而得的
myullian 2008-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 akirya 的回复:]
类的const函数内为什么不能够修改类成员的值!
这是规定
[/Quote]
就是规定,没有那么多的为什么
  • 打赏
  • 举报
回复
类的const函数内为什么不能够修改类成员的值!
这是规定
薛定谔之死猫 2008-04-18
  • 打赏
  • 举报
回复
指针函数,函数指针等不用记名称,写出来时候看*号的位置按照结合律进行归并就可以了

加了const就是用来约束这个了

64,684

社区成员

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

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