const 对象不能调用非 const 函数?

haow85 2010-09-15 10:51:20
下面的代码,去掉 computeNorm() 后面的 const 就无法编译通过了。

#include <iostream>
#include <cmath>
using namespace std;

class Point{
public:
double computeNorm() const{return sqrt(x*x+y*y);};
private:
double x, y;
};

int operator<(const Point &pt0, const Point &pt1)
{
double norm0 = pt0.computeNorm();
double norm1 = pt1.computeNorm();
return norm0 < norm1;
}

int main (int argc, char * const argv[]) {
// insert code here...
std::cout << "Hello, World!\n";
return 0;
}
...全文
401 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
haow85 2010-09-15
  • 打赏
  • 举报
回复
让大家继续讨论讨论,不挺好的么。
haow85 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pengzhixi 的回复:]

引用 9 楼 haow85 的回复:
引用 8 楼 abigwood 的回复:

operator+如果要写成成员函数,当然得是const的。不过一般都写成全局函数。

为什么?


如果是成员函数 那么
A+B=C+D;就变成合理的了。
[/Quote]
原来是 lval 的问题。
pengzhixi 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 haow85 的回复:]
引用 8 楼 abigwood 的回复:

operator+如果要写成成员函数,当然得是const的。不过一般都写成全局函数。

为什么?
[/Quote]

如果是成员函数 那么
A+B=C+D;就变成合理的了。
haow85 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 abigwood 的回复:]

operator+如果要写成成员函数,当然得是const的。不过一般都写成全局函数。
[/Quote]
为什么?
aBigWood 2010-09-15
  • 打赏
  • 举报
回复
operator+如果要写成成员函数,当然得是const的。不过一般都写成全局函数。
pengzhixi 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 haow85 的回复:]
那岂不是某些重载的运算符函数也要定义成 const 了么?比如 operator+ const 之类的。
[/Quote]

如果不修改对象的话,那么就最好定义成const
haow85 2010-09-15
  • 打赏
  • 举报
回复
那岂不是某些重载的运算符函数也要定义成 const 了么?比如 operator+ const 之类的。
某某9 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 erwin1984 的回复:]

这个就是const 的作用,

例如: const 对象A 调用了非const函数F, F因为没有const约束可以修改A对象内的成员, 这不就违反了原来对A 声明const的本意了吗?

反之,非const对象调用const函数则是可以的
[/Quote]
const表示不能改成员,非const函数没保证不改成员
冻结 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hai040 的回复:]

是不能
const表示不能改成员,非const函数没保证不改成员
[/Quote]

嗯,就算你的非const函数并不修改成员,也不行,编译器编译时检测。
erwin1984 2010-09-15
  • 打赏
  • 举报
回复
这个就是const 的作用,

例如: const 对象A 调用了非const函数F, F因为没有const约束可以修改A对象内的成员, 这不就违反了原来对A 声明const的本意了吗?

反之,非const对象调用const函数则是可以的
haow85 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hai040 的回复:]

是不能
const表示不能改成员,非const函数没保证不改成员
[/Quote]
哦,知道了。
hai040 2010-09-15
  • 打赏
  • 举报
回复
是不能
const表示不能改成员,非const函数没保证不改成员
ccltiancai 2010-09-15
  • 打赏
  • 举报
回复
我是const的
而我是const是可能会修改我的
如果让你用了,我会很尴尬的
harderman 2010-09-15
  • 打赏
  • 举报
回复
菜鸟路过
genlic 2010-09-15
  • 打赏
  • 举报
回复
为什么要用const...你这里又要反其道...不是找抽么...

65,182

社区成员

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

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