В настоящее время я пишу исключающий код код, и мой дизайн не требует никакой гарантии броска для set :: find method. Я предполагаю, что объект компаратора всегда преуспевает. Это означает, что метод set :: find всегда будет успешным?std :: set :: найти исключения гарантии
Я подумал о такой возможности после того, как увидел, что согласно http://en.cppreference.com/w/cpp/container/set/erase, метод set :: erase, с тем же предположением, всегда должен быть успешным и, возможно, в нем есть находка (тогда это было бы безусловно достойно комментария в документация!)
Прямой источник проблемы заключается в том, что мне нужно проверить, находится ли элемент в наборе и удалить его из набора - все, что не имеет гарантии броска (оно находится в блоке catch).
Я не уверен в стандарте или каких-либо гарантиях для установленных или каких-либо stl-контейнеров, но я скажу это. Один раз я вызываю vector :: erase (v.end()) .. Он выбросил исключение .. Я часами пытался выяснить, почему. Оказывается, мой вектор пуст. Не уверен, что это все еще происходит, или если std :: set имеет эту проблему, но это случилось со мной в gcc 4.8.1 для Windows. Мне пришлось выполнить оператор if, проверяющий, будет ли 'vector :: find! = V.end() '. Я думаю, вам, возможно, придется это сделать. Это может быть единственный раз, когда вы не получите исключение точно? – Brandon
@CantChoose Это неопределенное поведение для пустого вектора, как и для непустого вектора. Вы не можете стереть первый элемент в прошлом ... – IInspectable
@CantChooseUsernames Вы должны быть рады, что выбрали исключение. Это неопределенное поведение AFAIK и, возможно, стерло ваш жесткий диск;) – dyp