Требования к контейнеру изменились с С++ 03 на С++ 11. Хотя С++ 03 имеет общие требования (например, конструктивность копирования и назначение для вектора), C ++ 11 определяет мелкозернистые требования к каждой операции с контейнером (раздел 23.2).
В результате вы можете, например, сохраните тип, который можно копировать, но не назначать - например, структуру с константным элементом - в векторе, пока вы выполняете только определенные операции, которые не требуют назначения (конструкция и push_back
являются такими операциями; insert
не является).
Мне интересно: это означает, что теперь стандарт позволяет vector<const T>
? Я не вижу причин, по которым это не должно быть - const T
, как структура с членом-константой, является типом, который является конструктивным, но не назначаемым, но я, возможно, что-то пропустил.
(Часть того, что заставляет меня думать, что я, возможно, что-то пропустил, состоит в том, что магистраль gcc сбой и ожоги, если вы пытаетесь создать экземпляр vector<const T>
, но это нормально с vector<T>
, где T имеет член const).