Передача вектора с помощью const rerefence и добавление элемента в вектор - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь понять следующую функцию-член:

void Date::setDays(const std::vector<Date> &days){
  Date d(1, 1, 1);
  m_days = days;
  m_days.push_back(d); // valid.
  days.push_back(d); // invalid.
}

В приведенной выше функции-члене, принадлежащей классу Date, я передаю days по ссылке как const.Я могу понять, почему незаконно добавлять элемент в days так, как он const.Однако мое замешательство заключается в том, как я могу добавить элемент к m_days?Разве это не относится к тому же вектору, что и days?Когда я добавляю элемент в m_days, значит ли это, что я тоже добавляю элемент в days?

Ответы [ 2 ]

2 голосов
/ 17 марта 2019

Вы присваиваете m_days a копия из days.Это не того же вектора, и если m_days не const (что, очевидно, не так, как вы только что присвоили ему), то добавление элементов к нему просто замечательно.Ничто из того, что вы делаете с m_days, никак не влияет на days.

2 голосов
/ 17 марта 2019

m_days = days создает копию массива days, т. Е. m_days является другим вектором, не зависящим от days, который имеет копию массива days. Любые изменения, которые вы вносите в m_days, не влияют на days. Следовательно, постоянство days не нарушается.

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