请教一个有关const的问题!!

zdy136 2003-10-10 07:30:03
#include <iostream>
using namespace std;

class line
{
private:
int length;
public:
line()
{
this->length=0;
}
line(int x)
{
this->length=x;
}
void setlength(int x)
{
this->length=x;
}
#1 int getlength() const
{
return this->length;
}
};


#2 int length(const line& l,int n)
{
int k=l.getlength();
return k>n?k:n;
}

int main(int argc, char* argv[])
{
line l1(10);
length(l1,10);
return 0;
}

在上面代码段中,为什么#2行中是const引用时,#1行中的const是必须的!
什么情况下会是这样子??请详细讲解一下,谢谢!!
...全文
16 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdy136 2003-10-16
  • 打赏
  • 举报
回复
谢谢上面各位大虾!!
xiaoyunet 2003-10-14
  • 打赏
  • 举报
回复
这是顺理成章的事,如果你对一个标记了const的引用调用了他的非const成员方法,就可能改变该const引用的状态,明白了吗?其实许多C++的语法是很严谨的,多思考思考,对你的内功会有很大提高。
从这个例子看,其他的场合下,也是一样的,简单的说,就是对于const引用不能调用可能会改变其成员的方法,所以你写getXXX函数的时候不要忘了加const,或者是觉得可加可不加。他们是一个严密的体系。
zdy136 2003-10-13
  • 打赏
  • 举报
回复
谢谢上面的那位独行虾,也欢迎更多的高手谈谈你们的看法!
robbie24 2003-10-12
  • 打赏
  • 举报
回复
恩... 首先,感觉我们在讨论一个有关于编程风格与良好习惯的问题.(笑)
F话我就不多说了,道理也很简单,上面也都说过了.
我想说的是,给你的参数表中的引用加上const修饰符是一种良好的约定,你告诉了阅读代码以及使用他的其他用户,这个reference所指对象在我的函数中是不允许更改的,(而我们往往传rerference却又都是处于效率的考虑而已,少调用就个copy constructor不好吗?(笑)),这是个良好的'约定'与'风格'.
还有,对于member function后面加const,有些人只说对了一半(笑).对,一半是出于安全的考虑,另一半是,当你的class产生出一个具有const属性的object之时,它的所有行为,都仅限于对于const member function的调用,也就是说,非const函数无法使用. 那么,你说你能保证你的client不会使用你所编写的class 的const版本吗?(笑)
请保持你优雅与严谨的风格.就好象你小时候父母敦促你饭前洗手一样-----是没有坏处的.
5510 2003-10-12
  • 打赏
  • 举报
回复
第一个const是 说函数不能改变调用它的对象,以防止对象的非法改变。 第二个const不加也可以调用const的函数。
herrycsdn 2003-10-10
  • 打赏
  • 举报
回复
const是不能被改变的意思,当然要这样了
Wolf0403 2003-10-10
  • 打赏
  • 举报
回复
2 中得到的 line& 是一个 const ref,因此只能执行用 const 标明的成员函数。它们不会更改 const 对象的状态
ssbull 2003-10-10
  • 打赏
  • 举报
回复
函数后面加const,表示该函数不改变成员变量
zdy136 2003-10-10
  • 打赏
  • 举报
回复
其实函数int getlength()也没有改变对象的状态啊!!

64,686

社区成员

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

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