LINUX.ORG.RU

C++:: Работа со структурой по ссылке, полученной с помощью итератора

 ,


0

1

Всем привет! Как жизнь?) Вопрос академического характера. Есть такой цикл:


struct Data
{
  std::string name_pack;
  std::list<std::string> values;
};

bool func_real(std::string &val)
{
  //что-то делаем со структурой:
  bool result = handler(val);
  return result; //* <-ТОЧКА ОСТАНОВКИ
}

//записываем данные
Data data = ...;

//работаем с элементом структуры по ссылке, и надеемся,
//что эта работа изменит текущее содержимое data
for (auto el : data.values)
{        
  if (!func_real(el)) continue;
}

//на выходе в date ничего не изменилось, хотя в ТОЧКЕ ОСТАНОВКИ
//данные менялись

В методе func_real(Data &data) ссылка, соответственно, не const,

т.к. есть желание работать по ссылке с содержимым data.

Что я делаю неправильно, подскажите, пожалуйста.


Как выше сказали. Это

for (auto el : data.values)

раскрывается в

for (std::string el : data.values)

С auto надо так:

for (auto &el : data.values)

P.S. Забавно в свете того, что любят говорить, что auto позволяет избегать ошибок :)

xaizek ★★★★★ ()

//работаем с элементом структуры по ссылке, и надеемся, //что эта работа изменит текущее содержимое data for (auto el : data.values)

Надеяться то можно, но для уверенности необходим знак амперсанда

Crocodoom ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.