C++ 用(引用) 取的出STL容器中的 值位址卻無法改變其值.
習慣沉默
習慣沉默 2017-05-16 13:28:05
0
3
669
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;
}

謝謝大家的幫忙.

習慣沉默
習慣沉默

全部回覆(3)
仅有的幸福

你對引用的理解有錯啊
getTestData(testMap, 1, tempData1);
這條語句並不能使tempData1變成對testMap[1]的引用,這個函數只是讓函數中所有對data的操作同樣反映到tempDada1上,所以是data變成了tempData1的引用。而你的tempdata1根本沒有引用testMap裡面的任何元素,所以改變了tempdata1不會有啥效果的。

某草草

在getTestData函數裡面,你的賦值語句data=it-

解決方法就是重寫拷貝建構函數,讓他回傳原始物件。還有就是可以使用指標的方式。

Ty80

把getTestData改成setTestData,用data給it->second賦值

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!