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)//增加两次.
我理解对吗?
返回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对象.