首先,为什么要返回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)
//增加两次。
答案 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)
是的,你的理解是正确的。 为避免意外分配,可以按const
或const reference
返回对象。
使用operator -
,您可以按值返回对象。为了避免它被意外编辑,可以返回const
值,因为无论如何该对象将主要是临时的。
对于operator ++
,通常会返回引用,但为避免(++ x) = y;
的情况,您可以通过const
引用返回它。