[container.requirements]
Изменение: сложность size() функций-членов теперь постоянна.
Обоснование: Отсутствие спецификации сложности size() привело к различным реализациям с несовместимыми характеристиками производительности.
Влияние на исходную функцию:
некоторые реализации контейнеров, соответствующие C ++ 2003, могут не соответствовать указанным size() требованиям в этом международном стандарте. Регулировка контейнеров, например, в std::list соответствии с более строгими требованиями, может потребовать несовместимых изменений.
[container.requirements]
Изменение: Изменение требований: расслабление.
Обоснование: Разъяснение.
Влияние на исходную функцию:
допустимый код C ++ 2003, который пытается удовлетворить указанные требования к контейнеру, теперь может быть переопределен. Код, который пытался переносить между контейнерами, возможно, потребуется изменить следующим образом:
не все контейнеры предоставляют size(); использовать empty() вместо size() == 0;
не все контейнеры пусты после конструкции (array);
не все контейнеры имеют постоянную сложность для swap() (array).
[container.requirements]
Изменение: Изменение требований: конструктивно по умолчанию.
Обоснование: Уточнение требований к контейнерам.
Влияние на исходную функцию:
действительный код C ++ 2003, который пытается явно создать экземпляр контейнера с использованием определяемого пользователем типа без конструктора по умолчанию, может не компилироваться.
[sequence.reqmts], Изменение: Изменения подписи: из возвращаемых типов.
Обоснование: старая подпись отбрасывала полезную информацию, пересчет которой может быть дорогостоящим.
Влияние на исходную функцию:
были изменены следующие функции-члены:
[associative.reqmts]
void
erase(iter) для set, multiset, map, multimap
erase(begin, end) для set, multiset, map, multimap
insert(pos, num, val) для vector, deque, list, forward_list
insert(pos, beg, end) для vector, deque, list, forward_list
Допустимый код C ++ 2003, который полагается на возвращение этих функций void (например, код, который создает указатель на функцию-член, указывающую на одну из этих функций), не сможет скомпилировать с этим международным стандартом.
[sequence.reqmts], Изменение: подпись меняется: с на
параметры.
Обоснование: превышение спецификации.
Влияние на исходную функцию:
подписи следующих функций-членов изменились с принятия
на принятие : [associative.reqmts]
iterator const_iterator
iterator const_iterator
insert(iter, val) для vector, deque, list, set, multiset, map, multimap
insert(pos, beg, end) для vector, deque, list, forward_list
erase(begin, end) для set, multiset, map, multimap
все формы list::splice
все формы list::merge
Допустимый код C ++ 2003, использующий эти функции, может не соответствовать этому международному стандарту.
[sequence.reqmts], Изменение: Подпись изменения: .
Обоснование: производительность, совместимость с семантикой перемещения.
Влияние на исходный объект:
для , и
переданное значение заливки теперь передается по ссылке, а не по значению, и была добавлена дополнительная перегрузка . Допустимый код C ++ 2003, использующий эту функцию, может не соответствовать этому международному стандарту. [associative.reqmts]
resize
vector deque list resize resize