返回类型问题
请问什么时候应该返回对象什么时候应该返回&,这个特别困惑,有大神知道吗?求解答
请问什么时候应该返回对象什么时候应该返回&,这个特别困惑,有大神知道吗?求解答
2015-11-25
操作符运算就是调用函数运算 例:a+b就是operator+(a,b) 然后在返回的数据上继续运算 根据这个来决定返回类型 只要系统没有限制你修改 你就可以根据实际使用情况决定
例:前置++ 返回的就是引用 后置就是对象 因为后置++的值在函数体内已经改变 返回原对象的引用 那么参与运算的就是自加后的状态 违背了大家对后置++功能的共识
3.还有一点就是返回引用比对象效率高多了 当功能一样时 我们通常用引用不用对象 看下面代码 很多程序员能用前置不用后置 就是为了防止使用临时对象 如果遇到构造析构消耗比较大的对象时 效率可是相差很大的
#include <iostream>//mooc提交用 using namespace std;//mooc提交用 class A{ public: A(){cout<<"A()"<<endl;} A(const A&){cout<<"const A(&)"<<endl;} ~A(){cout<<"~A"<<endl;} A operator++(int){ A temp(*this); cout<<"A+=1的代码"<<endl; return temp; } A& operator++(){ cout<<"A+=1的代码"<<endl; return *this; } }; int main(int argc, const char * argv[] ) {//---------------main-------------- A a; cout<<"------a++-----"<<endl; for (int i=0;i!=2; i++,a++) {} cout<<"------++a-----"<<endl; for (int i=0;i!=2;++i,++a) {} cout<<"------end-----"<<endl; //---------------main-------------- return 0; }
输出结果
A() ------a++----- const A(&) A+=1的代码 ~A const A(&) A+=1的代码 ~A ------++a----- A+=1的代码 A+=1的代码 ------end----- ~A
举报