差分

2011-10-06 53 views
2

對於下面的代碼段:)差分

struct Pair{ 
    string name; 
    double val; 
} 
vector<Pair> pairs; 
double& value(const string& s) 
{ 
    for (int i=0; i<pairs.size(); i++) 
     if (s==pairs[i].name) return pairs[i].val; 
    Pair p = {s,0}; 
    pairs.push_back(p); 
    return pairs[pairs.size()-1].val; 
} 

提交狀態

對於給定的參數字符串,值(找到對應的浮點點對象(不是相應的浮點對象的值);然後它返回一個對它的引用。

「浮點對象」和它的值有什麼區別?

回答

5

對象是包含該值的實際內存塊。

所以,如果你得到的參考,你可以替換它的值,它仍然存儲在原始向量。

當然,如果你只希望得到的值(由返回值更改爲沒有&),你將無法在矢量改變實際值。

1

double& value(const string& s) < - 它藏在這裏。 &標記引用,而不是變量的值(如果您不知道引用是什麼 - 它就像const,非空指針)。

0

功能value不返回的數字(例如,3.1415或42),但一參照可變(技術術語是左值)。它返回一個句柄,讓你訪問存儲號碼的實際對象(特別是你可以讀取數字),甚至修改它。

機智:

value("foo") = 42.314; 

將修改Pair對象,其name"foo"

如果你現在還是做

std::cout << value("foo") << "\n"; 

它將打印42.314