Результат зависит от объявления переменной цикла: auto e изменяет копию, auto& e — элемент вектора. При const auto& присваивание нуля не компилируется.
Итерация по вектору {1,2,3} с присвоением e=0 — что произойдёт?
Результат зависит от объявления переменной цикла: auto e изменяет копию, auto& e — элемент вектора. При const auto& присваивание нуля не компилируется.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Результат зависит от объявления переменной цикла: auto e изменяет копию, auto& e — элемент вектора. При const auto& присваивание нуля не компилируется.
Для обычного std::vector<int> v{1,2,3}:
for (auto e : v) e = 0; // v остаётся {1,2,3}
for (auto& e : v) e = 0; // v становится {0,0,0}
auto&& e в range-for по этому вектору тоже связывается с элементом и позволяет его изменить. Без полного заголовка цикла один вариант выбрать нельзя. Отдельно учитывайте proxy-типы вроде vector: их поведение не стоит механически переносить на vector.