函数处理结果返回的三种方法:传递引用,传递指针,放回值
一个问题是:设计C++函数传参时如何决定使用指针还是引用?
关于讨论在知乎上有一个比较好的回答:设计C++函数传参时如何决定使用指针还是引用
还有就是返回指针的形式来返回一个结果:
#include <iostream>
#include <unordered_map>
#include <unordered_set>
#include "glog/logging.h"
#include <gflags/gflags.h>
#include "helloWorld.h"
using namespace std;
unordered_map<int, int>* getMyMap(unordered_map<int, unordered_map<int, int>>* source, unordered_map<int, int>* target){
auto p = source->find(1);
if (p != source->end()){
cout<<"add"<<endl;
cout<<p->second[1]<<endl;
*target = p->second;
cout<<"targetsize:"<<target->size()<<endl;
return &(source->at(1));
}
return nullptr;
}
int main(int argc, char* argv[]) {
unordered_map<int, unordered_map<int, int>> source;
unordered_map<int,int> a{{1,2},{2,3}};
unordered_map<int,int> b{{1,2},{2,3}};
source[1] = a;
source[2] = b;
cout<<source.size()<<endl;
unordered_map<int, int> target;
unordered_map<int, int>* target2 = getMyMap(&source,&target);
cout<<"target2Size:"<<target2->size()<<endl;
cout<<target.size()<<endl;
testGlog();
return 0;
}
同时用两个方法来返回函数的处理结果:一种是通过返回指针的形式将结果保存到target2中,另一个是以传入指针的形式将结果保存到了target指针中,使用引用的形式和传入指针的形式相近。
但是容易犯的一个错误是:使用迭代器来放回值,是错误的
unordered_map<int, int>* getMyMap(unordered_map<int, unordered_map<int, int>>* source, unordered_map<int, int>* target){
auto p = source->find(1);
if (p != source->end()){
cout<<"add"<<endl;
cout<<p->second[1]<<endl;
*target = p->second;
cout<<"targetsize:"<<target->size()<<endl;
return &(p->second);
}
return nullptr;
}
迭代器p离开函数以后就失效了,所以并不能将结果成果的返回。