Повисший диапазон в C++
Повисший диапазон возникает, когда представление ссылается на память, которая уже уничтожена. Временный вектор исчезает после точки с запятой, а взгляд на него остается.
Опасный вариант: представление живет дольше контейнера. Запишем его и не используем после уничтожения данных - только как пример ошибки:
auto risky = std::views::all(std::vector<int>{1, 2, 3});
// risky outlives the temporary vector
Безопасно сначала сохранить контейнер в
переменную, затем построить std::views::all.
Запишем так и выведем элементы:
std::vector<int> stable = {1, 2, 3};
auto safe = std::views::all(stable);
for (int v : safe) {
std::cout << v << "\n";
}
Сохраните вектор в именованной переменной, оберните его в std::views::all и выведите сумму элементов.