c++关于const的使用

雷雷518 2010-08-10 02:06:16
const char get(int index) const;
为一个类的成员函数,此句是加两个const,有什么意义?如果去掉第一个const有什么意义;及去掉第二个const又有什么意义?
鄙人学的不好,望各位多多指点
...全文
282 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
nazzon2004 2010-08-11
  • 打赏
  • 举报
回复
const char get(int index) const;
为一个类的成员函数,此句是加两个const,有什么意义?如果去掉第一个const有什么意义;及去掉第二个const又有什么意义?
鄙人学的不好,望各位多多指点

返回值和类的成员不能被修改
九月恒心 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wyz007134 的回复:]

如果是const char get(const int index) const;那岂不是更难理解了?

其实理解起来也不难分解看看

第一个const 修饰char,char是get的返回值,也就是get函数返回一个常量字符
第二个const 修饰 int index,index是get的参数,说明get带有一个常量整形参数
第三个const,是函数末尾的const,用于类的成员函……
[/Quote]

解释的很详细,谢谢哦
lovestefanie 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wyz007134 的回复:]
如果是const char get(const int index) const;那岂不是更难理解了?

其实理解起来也不难分解看看

第一个const 修饰char,char是get的返回值,也就是get函数返回一个常量字符
第二个const 修饰 int index,index是get的参数,说明get带有一个常量整形参数
第三个const,是函数末尾的const,用于类的成员函数……
[/Quote]
学习了,精辟
libinfei8848 2010-08-11
  • 打赏
  • 举报
回复
这样函数声明通常出现在类的声明
独酌逸醉 2010-08-11
  • 打赏
  • 举报
回复
http://blog.csdn.net/chinazhangjie/archive/2010/08/04/5788612.aspx
ToBeOOP 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qq120848369 的回复:]
引用 5 楼 llahyy 的回复:
有const这个类?


楼主,我们一致推荐你耐心看书,其他不说了/
[/Quote]

容易理解,UP!
willabc 2010-08-11
  • 打赏
  • 举报
回复
学习啦!
都先生 2010-08-11
  • 打赏
  • 举报
回复
在C++ Primer Plus第十章 对象和类 很详细的讲解。
meisizhaosi 2010-08-11
  • 打赏
  • 举报
回复
第一个const表示返回值不可以修改,由于是按数值传递,编译器在里面创建副本,如果这个参数是按const传递的,这个副本上不可以修改的,在函数体执行完函数的功能后,如果需要返回值,用return返回,如果不需要则不用写,编译器会生成一个隐性退出点,这两种情况都是表示函数执行结束,这个副本离开了函数的作用域,自然被编译器自动消灭,但是如果需要返回,编译器会复制这个副本,然后再把它消灭,在返回数值类型前面加上const表示这个副本的副本是不可以被修改的,最后一个const表示这是一个const成员函数,表示里面的private部分的数据在这个函数里面不能被修改,只能用const类指针来调用类的const成员函数,不能来调用类的非const成员函数,因为const类指针里的const表示返回的指针不可以被修改,而非const成员函数有可以改变指针.
RLib 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thefirstz 的回复:]
第一个是修饰返回值,第二个修饰函数,表示这个函数是const成员函数
[/Quote]

正解
雷雷518 2010-08-11
  • 打赏
  • 举报
回复
谢谢LS各位,这下很清楚了。
zhangzhongke007 2010-08-10
  • 打赏
  • 举报
回复
9L讲的详细。
k81348 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wyz007134 的回复:]

如果是const char get(const int index) const;那岂不是更难理解了?

其实理解起来也不难分解看看

第一个const 修饰char,char是get的返回值,也就是get函数返回一个常量字符
第二个const 修饰 int index,index是get的参数,说明get带有一个常量整形参数
第三个const,是函数末尾的const,用于类的成员函……
[/Quote]

经典!!UP!
  • 打赏
  • 举报
回复
const char get(int index) const前面那个表示返回一个常字符,后面这个const表示不会修改变量值,函数体内不允许调用其他非const修饰的函数
黎翔 2010-08-10
  • 打赏
  • 举报
回复
A b,c;
b.tval(c); 这时b就是隐式的访问,c就是显示的访问
c.tval(b); 这时c就是隐式的访问,b就是显示的访问
yujixi123 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wyz007134 的回复:]

如果是const char get(const int index) const;那岂不是更难理解了?

其实理解起来也不难分解看看

第一个const 修饰char,char是get的返回值,也就是get函数返回一个常量字符
第二个const 修饰 int index,index是get的参数,说明get带有一个常量整形参数
第三个const,是函数末尾的const,用于类的成员函……
[/Quote]经典
黎翔 2010-08-10
  • 打赏
  • 举报
回复
我这里引伸一个函数:
class A
{
int num;
.....
};
const A & tval(const A & a) const;
该函数隐式的访问一个对象,而显示地访问另一个对象,并返回其中一个对象的引用。
括号中的const表明,该函数不会修改被显示地访问的对象;而括号后的const表明,该函数不会修改被隐式地访问的对象。由于该函数返回了两个const 对象之一的引用,因此返回类型也应为const引用。
该函数必须用到this指针
例如:
const A & tval(const A & a) const
{
if (a.num > num)
return a;
else
return *this;
}
wrmtc108 2010-08-10
  • 打赏
  • 举报
回复
第一个 const 禁止修改返回值
第二个 const 修饰 this指针,禁止 通过this 修改对象
wyz007134 2010-08-10
  • 打赏
  • 举报
回复
如果是const char get(const int index) const;那岂不是更难理解了?

其实理解起来也不难分解看看

第一个const 修饰char,char是get的返回值,也就是get函数返回一个常量字符
第二个const 修饰 int index,index是get的参数,说明get带有一个常量整形参数
第三个const,是函数末尾的const,用于类的成员函数定义时修饰,但是具体修饰什么,不明显,因为它后面没有明确的跟着什么。
函数的后面是函数体,这个const就是修饰函数体的,修饰函数体的作用就是要求这个函数体不对类的成员造成改变,比如赋值,自增自减等操作都是非法的。


class A
{
public:
A(int a) : m_a(a)
{}
void foo(int a) const
{
cout << ++a << endl; // OK
// cout << ++m_a << endl; // ERROR
}
int m_a;
};
qq120848369 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 llahyy 的回复:]
有const这个类?
[/Quote]

楼主,我们一致推荐你耐心看书,其他不说了/
加载更多回复(7)
内容概要:本文围绕基于CNN-BiLSTM-Attention混合神经网络模型的电力负荷预测展开研究,提出一种结合卷积神经网络(CNN)、双向长短期记忆网络(BiLSTM)与注意力机制(Attention)的深度学习框架,并通过Python代码实现高精度的短期与超短期负荷预测。该模型充分利用CNN对局部特征的提取能力,捕捉负荷数据中的周期性与趋势性模式;借助BiLSTM对时间序列前后向依赖关系的建模能力,增强对动态变化的感知;并通过Attention机制自适应地聚焦关键历史时刻,提升预测准确性。文中详细阐述了数据预处理、模型结构设计、训练流程及超参数调优方法,并在真实负荷数据集上进行了实验验证,结果表明该混合模型相比传统单一模型和其他基准模型具有更优的预测性能,尤其在应对非线性、非平稳负荷波动方面表现突出。; 适合人群:具备一定Python编程能力和机器学习基础,从事电力系统分析、能源管理、智能电网或时序预测相关工作的科研人员、工程师及高校研究生。; 使用场景及目标:①应用于电网调度、电力市场出清、需求响应管理等场景下的精细化负荷预测;②为研究人员提供一套完整的、可复现的深度学习负荷预测代码框架,推动AI技术在能源领域的落地应用;③帮助理解CNN、BiLSTM与Attention模块之间的协同机制及其在时序建模中的集成方式。; 阅读建议:建议读者结合所提供的Python代码进行动手实践,重点掌握数据归一化、滑动窗口构造、模型搭建与训练技巧,并尝试在不同地区、不同季节的负荷数据上进行迁移测试,以深入理解模型泛化能力与调参策略。
内容概要:本文围绕“MATLAB具有储能的经济调度及机会约束和鲁棒优化”展开,系统研究了电力系统中融合储能技术的经济调度问题,重点探讨了机会约束规划与鲁棒优化方法在应对新能源出力不确定性、负荷波动及系统运行风险中的应用。内容涵盖风光储协同调度、多微网共享储能、电动汽车参与调度、低碳经济调度等多种典型场景,深入分析了储能的选址定容、功率协调控制、状态估计与优化调度模型。核心技术包括粒子群优化(PSO)、分布鲁棒机会约束(DRCC)、模型预测控制(MPC)、鲁棒优化、二阶锥规划(SOCP)等先进算法,并提供了基于Matlab/Simulink的完整仿真代码实现,旨在提升新型电力系统的运行灵活性、经济性与抗风险能力。; 适合人群:具备电力系统、自动化、电气工程或相关专业背景,熟悉Matlab/Simulink仿真环境与基本优化算法,从事新能源并网、微电网运行、储能系统规划、电力市场调度等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:① 学习并构建含储能的电力系统经济调度优化模型;② 掌握机会约束与鲁棒优化在处理新能源不确定性问题中的建模思路与求解方法;③ 利用提供的Matlab代码进行算法复现、仿真验证与性能对比,支撑科研项目攻关;④ 为撰写高水平学术论文、学位论文或工程优化方案提供可靠的模型参考与代码支持。; 阅读建议:建议读者结合文档中具体的案例(如风电-水电联合调度、电动汽车集群调度、多微网共享储能等)和配套的Matlab代码进行动手实践,重点关注优化模型的构建逻辑、约束条件设定与求解器配置过程,同时可关注公众号“荔枝科研社”获取完整资源包、复现教程及持续的技术支持。

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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