Size: a a a

IT KPI C/C++ ХВ (не UB)

2020 December 14

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
во первых
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
как я узнаю что мне надо вызвать делит на елементе что мне эта функция выдала?
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
во вторых
что происходит с вектором когда ты обращаешься за его границы по индексу?
источник

VK

Vlad Kotsiuba in IT KPI C/C++ ХВ (не UB)
Там есть по типу проверки на индекс, что бы не выходил за границу, если выходит, то кинется ексепшн и по моей логике вернет не объект массива, а новый чистый объект на куче, но чувствую что это не совсем работает как я хотел
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
это самую малость плохая идея делать новый объект на куче при обращении по индексу(имхо естественно)
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
представь сколько таких объектов я смогу сделать если у меня что-то с индексом наебнулось
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
ну например там есть 5 елементов
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
в я итерируюсь от 0 до 10000
источник

VK

Vlad Kotsiuba in IT KPI C/C++ ХВ (не UB)
Я понимаю, как тогда можно это изменить? Я думал об возвращении первого объекта или последнего в массиве, но если и его не будет...
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
обычно делают асерт на границы
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
в релизе будет краш
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
но такова жизнь
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
насколько я помню вектор тоже просто асертит если индекс вне границ масива
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
а со стримами я бы просто делал инпут через >> в твои переменные (а вывод через << соответственно) без доп манипуляций(в качестве разделителей можно юзать пробел, по дефолту он будет пропускаться при вводе)
источник

VK

Vlad Kotsiuba in IT KPI C/C++ ХВ (не UB)
Ruslan Neshta
насколько я помню вектор тоже просто асертит если индекс вне границ масива
А никак без асерта не обойтись? Не хотелось бы заканчивать програму, просто что бы пользователь видел что ошибка и ничего не получал после использования оператора []
источник

VK

Vlad Kotsiuba in IT KPI C/C++ ХВ (не UB)
Ruslan Neshta
а со стримами я бы просто делал инпут через >> в твои переменные (а вывод через << соответственно) без доп манипуляций(в качестве разделителей можно юзать пробел, по дефолту он будет пропускаться при вводе)
Думаю так и делать, а то слишком запутано там
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
хм, ну можно делать статик поле с инвалид значениями если так хочешь
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
как обозначение не валидного обьекта
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
ну и оператор==/метод isValid прикрутить для проверки того валиден ли обьект
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
я бы просто дал пользователю возможность работы
источник