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

dem*_*xSH 5 c++ const operator-overloading

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

friend const MyVec operator-(const MyVec& left, const MyVec& right)
Run Code Online (Sandbox Code Playgroud)

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

mva - mvb = mvc;
Run Code Online (Sandbox Code Playgroud)

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

friend const MyVec& operator++(MyVec& v)
Run Code Online (Sandbox Code Playgroud)

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

如果是

MyVec& operator++(MyVec& v)

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

我理解对吗?

Zan*_*ynx 7

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

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

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

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

T& operator[](size_t index);
const T& operator[](size_t index) const;
Run Code Online (Sandbox Code Playgroud)

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