как красиво получить элемент этого вектора? Красиво == лучше, чем optional_vector->operator [](i).
at ?
at != operator[]
optional_vector.value()[i];
и? что-то мешает по методу at получить элемент? это о чем было?
(*v)[i], если без проверки на nullopt
optional это выполнит за тебя и выбросит исключение
* не бросает исключение, value() бросает
В стдлибе не любят, чтобы перегруженные операции бросали исключения
ну, они здесь последовательны, да
И стрелочка тоже не бросает, кстати
Ещё бы стрелочка бросала
Весьма удобно. Спасибо! Но теперь возникла ошибка при использовании value (да и стрелочек тоже) :https://godbolt.org/z/sGhK1e выдаёт "bad optional access". Я мб неправильно доку понял, но разве я не могу просто добавлять в неинициализиварованный (какими-то значениями) опциональный вектор элементы?
пока не присвоишь ему значение он будет nullptr
идея std::optional в том, чтобы ввести состояние "значения неизвестно" или null: std::optional<int> o; if( !o.has_value() ) { o = 42; }
У меня есть сторонняя либа, которая выдаёт какие-то данные, если я ей даю свои. Мне нужно проверять, получил ли я какие-то значения на выходе и дальше уже строится своя логика. Получается, чтобы нормально делать emplace_back, нужно задать вектор каким-то первым значением, а уже потом в цикле emplace_back?
0 значений может быть?
ну там логика такая std::optional<std::vector<int>> o = thirdparty_library_call(...); if( !o.has_value() ) { o = std::vector<int>(); }
assign operator тоже вполне
Обсуждают сегодня