浮点对象与其值之间的差异

时间:2011-10-06 20:23:00

标签: c++ object reference

关于以下代码段:

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()查找相应的浮点对象(不是相应浮点对象的值);然后它返回对它的引用。

“浮点对象”与其值之间的差异是什么?

3 个答案:

答案 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";