游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2820|回复: 6

[新手]关于const修饰类方法

[复制链接]

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
发表于 2006-11-5 03:33:00 | 显示全部楼层 |阅读模式
const A* A::func(void); //A是某个类
const A* A::func(void) const;

第一句很好理解,方法反回一个类A的实例的指针,并且该实例不可修改;
第二句,我的理解是:方法反回一个类A的不可修改的实例的指针(这跟第一句一样),而且该指针的指向也是不能修改的。不知道我理解得对不对?

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
 楼主| 发表于 2006-11-5 04:15:00 | 显示全部楼层

Re:[新手]关于const修饰类方法

google了一下,第二句最后那个const是防止修改类成员;
那么,能不能像const int *count i;那样,返回一个指向不可修改的实例的不可修改的指针(缀口 = =U)?写成:
const A *const A::func(void);

248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2006-11-5 12:16:00 | 显示全部楼层

Re:[新手]关于const修饰类方法

也许可以,不过没什么意义,因为返回实际上是拷贝,和原来的指针没什么关系了。

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2006-11-5 13:38:00 | 显示全部楼层

Re:[新手]关于const修饰类方法

晕,修饰函数的const,一律放在后面。

const A* A::func(void) const;

第一个 const修饰A*  ,第二个const修饰 A::func(void)

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-11-5 13:48:00 | 显示全部楼层

Re:[新手]关于const修饰类方法

比如
class CA
{
public
    int getValue();
};
这样的类。如果你定义个const CA& refA = XXX;
refA.getValue();
这样是报错的。
一定要把类写成这样:
class CA
{
public
    int getValue() const; //const 表示这个函数不改变类A的成员变量
};

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
 楼主| 发表于 2006-11-5 14:12:00 | 显示全部楼层

Re:[新手]关于const修饰类方法

研究研究~

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-11-6 10:59:00 | 显示全部楼层

Re:[新手]关于const修饰类方法

这是个经典的const问题
举例:
1. const char *pStr 和 char const *pStr是一样的,表示pointer指向一块不可修改的内存,但是pointer本身可以修改,如指向其他const属性的内存
2. const char * const pStr表示pointer指向一块不可修改的内存,并且pointer不能被修改
3. A::func()表示一普通函数,函数体内,可以read/write类A实例的成员变量
4. A::func()const表示在该函数体内,仅可以read类A实例的成员变量,不能write即修改,其const是修饰func本身,并不影响其返回类型
5. C++是一种语言,const算是一种形容词,在读的时候要注意其所修饰的宿主,不能想当然,LZ应该细细品味

推荐一篇论文,有助理解:
http://www.ultimeth.com/Feb1999.pdf
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 19:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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