На https://learn.microsoft.com/en-us/cpp/standard-library/unordered-map-class?view=msvc-160 MS заявляет:
"вставка элемента не делает итераторов недействительными"
Но в книге «Стандартная библиотека C++» Николая Йосуттиса и https://en.cppreference.com/w/cpp/container/unordered_map говорится, что insert
может аннулировать итераторы, если insert
вызывает перефразирование.
MS просто предоставляет более сильную гарантию, чем стандарт? Если да, разрешено ли реализациям делать такие вещи?
Спасибо, Марк
Да, каждый поставщик компилятора должен как минимум соответствовать гарантиям стандарта, однако они могут предложить более сильные гарантии, если они того пожелают. Например, все достойные внимания компиляторы гарантировали оптимизацию возвращаемого значения (RVO) задолго до того, как это стало обязательным для стандарта.
Другие более сильные гарантии, которые предлагают многие компиляторы, заключаются в том, что
char
составляет 8 бит, что знаковые значения используют дополнение до двух, чтоint
составляет 4 байта и т. д.