为什么这个const是必需的?

I_code 2011-07-30 07:58:07

#include <iostream>
using namespace std;
class Widget
{
public:
int length() //const 为什么这个const是必需的?
{
return true_length;
}
int length(int l)
{
int retVal = true_length;
true_length = l;
return retVal;
}
protected:
private:
int true_length;
};
int padded_length(const Widget &w, int n)
{
int k = w.length();
return k > n? k: n;
}
int main()
{
Widget w;
padded_length(w, 7);
return 0;
}


代码如上,难道const的对象只能调用const版本的成员函数?
...全文
90 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tufei2963 2011-07-30
  • 打赏
  • 举报
回复
是的 你自己已经说了 const对象只能调用 const成员函数
紫色动力 2011-07-30
  • 打赏
  • 举报
回复
学习了,呵呵
pathuang68 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dizuo 的回复:]

int padded_length(const Widget &w, int n)
{
int k = w.length(); // w为const对象,需要调用const成员函数。
return k > n? k: n;
}
[/Quote]

++
说得好
天外来客-007 2011-07-30
  • 打赏
  • 举报
回复
const对象必须调用const成员函数!
const对象从语义上限制了对象的不可变性,而非const成员函数很有可能改变对象的状态,所以必须调用const成员函数。
Tim_包 2011-07-30
  • 打赏
  • 举报
回复
学习了
LucEaspe 2011-07-30
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
class Widget
{
public:

int length() const
// 加了const 该成员函数的功能为只读,不会对变量进行改变
{
return true_length;
}
int length(int l)
{
int retVal = true_length;
true_length = l;
return retVal;
}
protected:
private:
int true_length;
};
int padded_length(const Widget &w, int n)
{
int k = w.length();
return k > n? k: n;
}
int main()
{
Widget w;
padded_length(w, 7);
return 0;
}



至善者善之敌 2011-07-30
  • 打赏
  • 举报
回复
GOOGLE 常成员函数
Harper 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 frais 的回复:]
难道const的对象只能调用const版本的成员函数?

不错

const对象参数 表明 该对象在调用函数内不会被修改
然而该调用函数又调用了对象的非const成员函数
为保证const性质,则该函数必须为const
[/Quote]
同意
等待升级 2011-07-30
  • 打赏
  • 举报
回复
难道const的对象只能调用const版本的成员函数?

不错

const对象参数 表明 该对象在调用函数内不会被修改
然而该调用函数又调用了对象的非const成员函数
为保证const性质,则该函数必须为const
ryfdizuo 2011-07-30
  • 打赏
  • 举报
回复
int padded_length(const Widget &w, int n)
{
int k = w.length(); // w为const对象,需要调用const成员函数。
return k > n? k: n;
}

64,652

社区成员

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

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