LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1033|回复: 13

const放在后面有什么意思?

[复制链接]
发表于 2005-5-25 10:35:05 | 显示全部楼层 |阅读模式
一个函数
AcGePoint3d startPoint() const;
const放在后面跟前面有区别么
发表于 2005-5-25 10:49:06 | 显示全部楼层
const修饰this的
因为this是隐含的,所以const只能放在后面
回复 支持 反对

使用道具 举报

发表于 2005-5-25 11:05:57 | 显示全部楼层
这个函数应该是成员函数吧。
回复 支持 反对

使用道具 举报

发表于 2005-5-25 11:10:43 | 显示全部楼层
const成员函数
回复 支持 反对

使用道具 举报

发表于 2005-5-25 15:06:16 | 显示全部楼层
Post by nait
const修饰this的
因为this是隐含的,所以const只能放在后面



???你这个解释是什么意思,看不懂呢?能否详细一点。


我的解释如下:
被const修饰的成员函数,表明他不会修改任何成员变量,仅仅会读。
象标准库里面所有的get函数都是const的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-25 15:25:29 | 显示全部楼层
Post by 'Buddhist[CHinA
']???你这个解释是什么意思,看不懂呢?能否详细一点。


我的解释如下:
被const修饰的成员函数,表明他不会修改任何成员变量,仅仅会读。
象标准库里面所有的get函数都是const的



就是说,this对于这个成员函数是const,对别的就不一定了吧?这算是C++的安全机制吧?
回复 支持 反对

使用道具 举报

发表于 2005-5-25 16:25:12 | 显示全部楼层
表示该成员函数不会修改类的数据。否则会编译报错。

<<Thinking in C++>>
回复 支持 反对

使用道具 举报

发表于 2005-5-25 18:28:21 | 显示全部楼层
当时很急(急着去考试:-))所有匆匆忙忙灌了一通就走了
其实上面说的不是很准确,准确的说const是修饰this指向的对象的
譬如,我们定义了
class A{
public:
f(int);
};
这里f函数其实有两个参数,第一个是A *const this, 另一个才是int类型的参数
如果我们不想f函数改变参数的值,可以把函数原型改为f(const int),但如果我们不允许f改变this指向的对象呢?因为this是隐含参数,const没法直接修饰它,就加在函数的后面了,表示this的类型是const A *const this。
const修饰*this是本质,至于说“表示该成员函数不会修改类的数据。否则会编译报错”之类的说法只是一个现象,根源就是因为*this 是const类型的
回复 支持 反对

使用道具 举报

发表于 2005-5-25 18:55:44 | 显示全部楼层
强。透过现象看本质。
回复 支持 反对

使用道具 举报

发表于 2005-5-26 13:40:59 | 显示全部楼层
Post by nait
当时很急(急着去考试:-))所有匆匆忙忙灌了一通就走了
其实上面说的不是很准确,准确的说const是修饰this指向的对象的
譬如,我们定义了
class A{
public:
f(int);
};
这里f函数其实有两个参数,第一个是A *const this, 另一个才是int类型的参数
如果我们不想f函数改变参数的值,可以把函数原型改为f(const int),但如果我们不允许f改变this指向的对象呢?因为this是隐含参数,const没法直接修饰它,就加在函数的后面了,表示this的类型是const A *const this。
const修饰*this是本质,至于说“表示该成员函数不会修改类的数据。否则会编译报错”之类的说法只是一个现象,根源就是因为*this 是const类型的


这下透彻了 :thank pf
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表