为什么有时函数会返回一个const或const引用

时间:2011-05-20 04:17:08

标签: c++ operator-overloading const

首先,为什么要返回const? 说我有

friend const MyVec operator-(const MyVec& left, const MyVec& right)

所以返回const让我无法做到:

mva - mvb = mvc;

其次,为什么返回const引用? 如果有:

friend const MyVec& operator++(MyVec& v)

使用const我不能:(++mva) = mvc

如果是

MyVec& operator++(MyVec& v)

我可以:++(++mva) //增加两次。

我理解对了吗?

2 个答案:

答案 0 :(得分:7)

没有任何理由返回const对象。但是,返回指针或对const对象的引用有很多很好的理由。

程序可能有一个复制非常昂贵的对象,因此它返回一个引用。但是,不应通过该引用更改对象。例如,它可能是排序数据结构的一部分,如果其值被修改,它将不再正确排序。因此,const不会被意外修改。

算术运算符函数不应返回const对象,因为问题中存在问题。

取消引用迭代器应该返回一个const引用。也就是说,如果它是在const对象的集合上运行,或者可能在const集合上运行。这就是为什么类函数有时会有两个函数副本,第二个副本使用函数本身的const,如下所示:

T& operator[](size_t index);
const T& operator[](size_t index) const;

第一个函数将用于非const对象,第二个函数将用于const对象。

答案 1 :(得分:3)

是的,你的理解是正确的。 为避免意外分配,可以按constconst reference返回对象。

使用operator -,您可以按值返回对象。为了避免它被意外编辑,可以返回const值,因为无论如何该对象将主要是临时的。

对于operator ++,通常会返回引用,但为避免(++ x) = y;的情况,您可以通过const引用返回它。