Разница между объектом с плавающей точкой и его значением - PullRequest
2 голосов
/ 07 октября 2011

По отношению к следующему сегменту кода:

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 ]

5 голосов
/ 07 октября 2011

Объект является фактическим блоком памяти, который содержит значение.

Таким образом, если вы получите ссылку, вы можете заменить ее значение, которое все еще сохраняется в исходном векторе.

И, конечно, если вы просто получите значение (изменив возвращаемое значение на double без & ), вы не сможете изменить фактическое значение в вектор.

1 голос
/ 07 октября 2011

double& value(const string& s) <- здесь спрятано.<code>& отмечает ссылку, а не значение переменной (если вы не знаете, что такое ссылка - это как const, не нулевой указатель).

0 голосов
/ 07 октября 2011

Функция value возвращает не число (например, 3.1415 или 42), а ссылку на переменную (технический термин lvalue ).Он возвращает вам дескриптор для доступа к реальному объекту, хранящему номер (в частности, вы можете прочитать номер), и даже изменить его.

Для:

value("foo") = 42.314;

изменитPair объект, чье поле name равно "foo".

Если теперь вы сделаете

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

, оно напечатает 42.314.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...