为什么重载运算符的函数要用const

hhhhio110 2012-04-02 09:35:08
比如说重载 > < 我先声明重载 > 号的函数 然后直接在类中内联重载<号的 函数 这个函数中用到>
如果>号重载函数声明为const 则没问题 但是不声明为const 就会报错 报错内容就如没有重载直接用>去比较两个对象一样

还有另外一个问题 就是重载 == 和 != 和上面的一样重载==函数先声明 !=重载函数直接内联 但是这次 声明==重载函数就不需要为const 了 为什么
以下是代码
bool operator==(const RationalNumber &);
bool operator<(const RationalNumber &)const;

bool operator>(const RationalNumber &ration)
{
return (ration < *this);
}

bool operator!=(const RationalNumber &ration)
{
return !(*this == ration);
}
...全文
1638 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuhaoup 2012-04-02
  • 打赏
  • 举报
回复
使用const是一种好习惯,对于运算符重载你的操作如果不需要改变对象的值就加上const 对数据进行加固。这样做更安全。在大的工程项目里面其效果比较明显。在调用的时候const对象只能调用const成员。而非const可以调用const成员也可以调用非const 所以在对象调用的时候并没有什么影响。
baichi4141 2012-04-02
  • 打赏
  • 举报
回复
第一,重载运算符不必须const

第二,之所以编译器说你不加上const不行,是因为你让一个const对象调用了你重载的这个运算符
bool operator>(const RationalNumber &ration)
return (ration < *this);
ration对象被你声明为const对象,它只能调用const函数(包括重载运算符)
hhhhio110 2012-04-02
  • 打赏
  • 举报
回复
但是什么要加const 之后才能用 >呢 谁有运算符重载const运用相关的资料啊
Lactoferrin 2012-04-02
  • 打赏
  • 举报
回复
没有加 const 的函数不能在 const 对象上使用.
为了让你的函数能够在更多的情况下正常使用, 你最好对所有不会修改对象的函数加 const
draracle 2012-04-02
  • 打赏
  • 举报
回复
函数加上const后缀的作用是表明函数本身不会修改类成员变量。

比如标准<重载的定义就是:

bool operator < (const T & value) const

即表明输入参数是只读的,也表明函数本身也是只读的。用标准来讲,该函数是query。
menzi11 2012-04-02
  • 打赏
  • 举报
回复
以前看一个大牛说的能用const的地方一定要全都加上const,
开始不理解,后来才发现说的太对了...
hhhhio110 2012-04-02
  • 打赏
  • 举报
回复
不懂。。。
深圳大哥 2012-04-02
  • 打赏
  • 举报
回复
const只用于修饰this指针,用于函数签名,以实现C++的重载

这句话很有内含哈
如此美丽的你 2012-04-02
  • 打赏
  • 举报
回复
其实就是为了好看!
Vegertar 2012-04-02
  • 打赏
  • 举报
回复
const只用于修饰this指针,用于函数签名,以实现C++的重载。至于是否要加上,只依程序员是否设计为只读方法。
可以用C语言直接考虑c++成员函数的实现性定义。


class Foo {
public:
void method() const; // void Foo_method_const(const Foo *const this);
void method(); // void Foo_method(Foo *const this);
};

lulipeng_cpp 2012-04-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

没有加 const 的函数不能在 const 对象上使用.
为了让你的函数能够在更多的情况下正常使用, 你最好对所有不会修改对象的函数加 const
[/Quote]

++
iamnobody 2012-04-02
  • 打赏
  • 举报
回复
很明显,都应该加const
这是设计者犯下的一个小错误,无它.
lanmeng521131485 2012-04-02
  • 打赏
  • 举报
回复
等待大神来解答啊!!
www_adintr_com 2012-04-02
  • 打赏
  • 举报
回复
没有加 const 的函数不能在 const 对象上使用.
为了让你的函数能够在更多的情况下正常使用, 你最好对所有不会修改对象的函数加 const

64,701

社区成员

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

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