class TempTest{
public:
int _uid;
};
bool getTestData(std::map<int,TempTest>& vec,short id,TempTest &data){
auto it = vec.find(id);
if (it != vec.end()) {
data = it->second;
return true;
}
return false;
}
int main(){
std::map<int, TempTest> testMap;
// create data
TempTest testTemp;
testTemp._uid = 1054;
testMap[1] = testTemp;
TempTest tempData1;
// 获取出其引用
getTestData(testMap, 1, tempData1);
// 改变其值
tempData1._uid = 9918;
// 这样是可以修改成功 可是 感觉 太沉余代码了 想封装成函数...
//auto it = testMap.find(1);
//if (it != testMap.end()) {
// it->second._uid = 9918;
//}
for (auto &itor:testMap) {
std::cout<<itor.second._uid<<std::endl;
}
// 发现其值并没有得到改变...
return 0;
}
謝謝大家的幫忙.
你對引用的理解有錯啊
getTestData(testMap, 1, tempData1);
這條語句並不能使tempData1變成對testMap[1]的引用,這個函數只是讓函數中所有對data的操作同樣反映到tempDada1上,所以是data變成了tempData1的引用。而你的tempdata1根本沒有引用testMap裡面的任何元素,所以改變了tempdata1不會有啥效果的。
在getTestData函數裡面,你的賦值語句data=it-
解決方法就是重寫拷貝建構函數,讓他回傳原始物件。還有就是可以使用指標的方式。
把getTestData改成setTestData,用data給it->second賦值