社区
C++ 语言
帖子详情
C++类的指针函数和const函数
xiehui888
2008-04-18 08:45:23
对于指针函数的声明小弟一直很头疼,简单的还能够理解
复杂的我就晕呼呼了
还有我想知道类的const函数内为什么不能够修改类成员的值!
...全文
211
12
打赏
收藏
C++类的指针函数和const函数
对于指针函数的声明小弟一直很头疼,简单的还能够理解 复杂的我就晕呼呼了 还有我想知道类的const函数内为什么不能够修改类成员的值!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
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]
就是规定,没有那么多的为什么
珍惜生命远离CPP
2008-04-18
打赏
举报
回复
类的const函数内为什么不能够修改类成员的值!
这是规定
薛定谔之死猫
2008-04-18
打赏
举报
回复
指针函数,函数指针等不用记名称,写出来时候看*号的位置按照结合律进行归并就可以了
加了const就是用来约束这个了
相关推荐
《c语言深度解析》第3、4章 存储
类
、生命周期、作用域、链接域,
指针
与
函数
课程内容:第3章:存储
类
与auto、static、register关键字指令、常量、变量的生命周期变量与
函数
的作用域链接域与extern、static关键字声明的意义第4章:存储空间、符号、地址一级
指针
与多级
指针
野
指针
与段错误void *
指针
类
型
const
与
指针
函数
指针
函数
调用—栈的使用过程回调
函数
和
函数
指针
数组
指针
与
函数
传参递归
函数
内联
函数
c++
类
成员
函数
如果被static修饰,就不能为
const
修饰
c++
类
成员
函数
如果被static修饰,就不能为
const
修饰 原因是
const
修饰的是该成员
函数
的this
指针
,而static成员
函数
没有this
指针
,故不可为
const
,volitle.
【
c++
】
类
当中的
const
成员
const
成员 一、
const
修饰
类
的成员
函数
const
修饰
类
的成员
函数
称为
const
成员
函数
,实际上是修饰该成员
函数
的隐含this
指针
,表明在该成员
函数
当中不能对
类
的任何成员进行修改。 说明一下什么是this
指针
,this
指针
是每个
类
的成员
函数
隐含的第一个参数,当一个对象调用这个成员
函数
...
c++
函数
指针
类
构造
const
static new
c++
函数
指针
类
构造 拷贝构造
函数
const
static new相关知识点
《C经典面试》编译链接、
指针
、内存bug、
函数
、其它
课程内容:1.编译链接:编译链接过程、预编译、存储
类
、生命周期、作用域、链接域等2.
指针
:
指针
概念、数组相关的
指针
、字符串
指针
、
函数
指针
等3.内存bug:内存越位、内存覆盖、使用非法内存、内存泄露等。4.
函数
:自定义
函数
、内联
函数
、回调
函数
、变参
函数
、递归
函数
、库
函数
等5.其它:自动
类
型转换、数据溢出、结构体对齐、volatile、typedef、assert宏、逗号表达式、++/--等
C++ 语言
63,596
社区成员
250,393
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下