请教关于函数指针和const的理解

discory 2006-03-08 10:52:37
我对这个概念还不是很明白,看了一些资料, 如说函数就是一个地址,这个能理解
但是,如int *f(), int (*f)(),这个怎么理解啊,在难点如:int *(*f)()就完全不明白了
变量指针还好,但是遇到函数指针和类指针就昏掉

还有个问题就是int f() const这句语法是什么意思,是不是函数定义成const要在把const加
在函数后面?

新手,请多多帮助哈
...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
popy007 2006-03-08
  • 打赏
  • 举报
回复
照几位大虾说的,int f() const是函数f()返回的直不能修改?
田sir说的接受的一定是const类型是什么意思,举个例子好吗
=====

class X {
int i;
public:
int read() { return i; }
int read2() const { return i; }
// int read3() const { ++i; return i; } 错误,不能在const方法中修改内部成员
};

const X x;
//x.read(); 错误,const对象只能使用const方法
x.read2(); // 没问题!const对象使用const方法

X x2;
x.read(); // no problem
x.read2(); // no problem
discory 2006-03-08
  • 打赏
  • 举报
回复
照几位大虾说的,int f() const是函数f()返回的直不能修改?
田sir说的接受的一定是const类型是什么意思,举个例子好吗
tsst 2006-03-08
  • 打赏
  • 举报
回复
int f() const应该是表示函数的返回值是const类型,此时返回值的接收都也一定要是const类型
megaboy 2006-03-08
  • 打赏
  • 举报
回复
右左法则可以帮助你阅读一个复杂的声明,关于这个法则及阅读方法可以参考我的blog的以下内容:

http://blog.csdn.net/megaboy/archive/2005/09/17/482771.aspx
piaochen_2002 2006-03-08
  • 打赏
  • 举报
回复
同意楼上,....
bm1408 2006-03-08
  • 打赏
  • 举报
回复
int *fn()
这个表示函数返回的是一个int指针

int (*fn)()这个才表示函数指针

int *(*fn)()这个表一个函数指针,这个指针指向的函数返回一个int *的指针

int fn() const;表示在函数内部不能改变量的值~!
discory 2006-03-08
  • 打赏
  • 举报
回复
谢谢了
ox_thedarkness 2006-03-08
  • 打赏
  • 举报
回复
int fn() const
这不是通常函数的声明。 等你学到类的时候会接触的,它只能用于非static的类方法声明。

他的意义在于: 如果我们有类的一个const对象(说明它是只读的),只能调用其const方法,而C++ 令const方法不能修改自己的(注意是自己的)一般成员属性,也不能调用自己的非只读方法 —— 这就保证了我们只读对象的只读性,同时提供了访问权。

例:
class A{
int _i;
public:
void seti( int i ){ _i = i; }
int geti() const{ return _i; }
};

seti是通常方法,它用来设置 A::_i 的值,所以不能声明为const(否则编译器会对 _i=i 报错)。 而 geti 是用来读取 A::_i 的值,他应当声明为const。 假如有下面的定义:

A a;
const A& ca = a;

那么我们可以读/写a, 但是只能读 ca:

a.seti( 10 );
std::cout<< a.geti() << std::endl;
// ca.seti( 20 ); // 非法! 不能对只读对象调用非只读方法
std::cout<< ca.geti() << std::endl; // OK, geti 为只读方法

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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