关于以下代码段:
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;
}
作者陈述
对于给定的参数字符串,value()查找相应的浮点对象(不是相应浮点对象的值);然后它返回对它的引用。
“浮点对象”与其值之间的差异是什么?
答案 0 :(得分:5)
对象是包含值的实际内存块。
因此,如果您获得引用,则可以替换其值,该值仍存储在原始向量中。
当然,如果您只是获得了价值(通过将返回值更改为双而没有&amp; ),您将无法更改向量中的实际值。
答案 1 :(得分:1)
double& value(const string& s)
&lt; - 它隐藏在这里。 &
标记引用,而不是变量的值(如果你不知道引用是什么 - 它就像const,not-null指针)。
答案 2 :(得分:0)
函数value
不返回数字(例如3.1415或42),但引用变量(技术术语 lvalue ) 。它返回一个句柄,供您访问存储该数字的实际对象(特别是您可以读取该数字),甚至可以修改它。
即便:
value("foo") = 42.314;
将修改Pair
字段为name
的{{1}}对象。
如果你现在这样做
"foo"
它会打印std::cout << value("foo") << "\n";
。