【问题标题】:Difference between floating-point object and its value浮点对象与其值的区别
【发布时间】:2011-12-02 13:28:30
【问题描述】:

关于以下代码段:

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

“浮点对象”和它的值有什么区别?

【问题讨论】:

    标签: c++ object reference


    【解决方案1】:

    double&amp; value(const string&amp; s) & 标记引用,而不是变量的值(如果您不知道引用是什么 - 它就像 const,非空指针)。

    【讨论】:

      【解决方案2】:

      对象是包含该值的实际内存块。

      因此,如果您获得了引用,您可以替换它的值,该值仍存储在原始向量中。

      当然,如果您只是获取值(通过将返回值更改为 double 而没有 &),您将无法更改实际值向量中的值。

      【讨论】:

        【解决方案3】:

        函数value 不返回数字(例如3.1415 或42),而是对变量的引用(技术术语是左值)。它返回一个句柄供您访问存储数字的实际对象(特别是您可以读取数字),甚至可以修改它。

        也就是说:

        value("foo") = 42.314;
        

        将修改Pair对象,其name字段为"foo"

        如果你现在这样做

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

        它将打印42.314

        【讨论】:

          猜你喜欢
          • 2013-01-26
          • 1970-01-01
          • 1970-01-01
          • 2021-05-12
          • 2018-11-02
          • 1970-01-01
          • 2021-09-26
          • 2011-03-20
          • 2014-12-02
          相关资源
          最近更新 更多