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

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

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

新手,请多多帮助哈
...全文
169 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 为只读方法
代码下载地址: https://pan.quark.cn/s/068306a56640 在交通运输科学范畴内,交通流量分配是探讨交通系统内交通负荷如何在各个道路路段间进行合理分配的核心议题。交通流分配技术主要应用于模拟和推演交通系统的运行状态,旨在为城市规划人员与交通工程师提供优化道路布局的参考,进而缓解交通拥堵现象,提升道路交通的整体效能。以下将对"交通流分配技术"进行深入阐述: 1. **全部或无分配(All-or-Nothing Distribution)** 全部或无分配是一种基础的交通流分配策略。该技术依据最短路径准则,预设所有从发源地(Origin)至目的地(Destination)的车辆都将选择路程最短的路线。倘若存在多条等长路径,则采用随机方式确定其中一条。此类方法未将交通拥堵因素纳入考量,因为一旦选定路径,便假定所有交通量将沿此路径通行,即便这可能导致部分路段出现超负荷状况。 2. **逐步分配(Progressive Assignment)** 逐步分配技术顾及了交通网络的动态特征。该算法通过逐步优化流量配置,力求使网络内行驶的总代价(诸如通行时间、距离等指标)最小化。运算过程始于初始的全部或无分配状态,随后逐步修正路径选择,直至网络达成稳定状态,即每次流量修正后,总代价的变动幅度不再明显。此方法更贴近现实交通场景,因为车辆会依据即时路况选择最优路径。 3. **迭代平均分配(Iterative Average Distribution)** 迭代平均分配是一种对逐步分配技术的优化版本,其更侧重于实现网络流量的均衡化。在每一轮迭代过程中,算法不仅评估当前路径的优化程度,同时参考前一次迭代的流量配置。通过融入平均化理念,该方法能更有效地分散交通...

33,316

社区成员

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

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