Может ли std :: vector использовать небольшую оптимизацию буфера?

. Сегодня я с моим коллегой задавался вопросом, можно ли реализовать std :: vector для использования небольших оптимизация буфера. Изучив черновик C ++ 11, я прочитал 23.3.1p8

Выражение a.swap (b) для контейнеров a и b стандартного типа контейнера, отличного от массива, должен обмениваться значениями a и b без вызова каких-либо операций перемещения, копирования или обмена для отдельных элементов контейнера.

На первый взгляд кажется, что это запрещает небольшую оптимизацию буфера, но по правилу «как если бы» нам все еще разрешалось выполнять небольшую оптимизацию буфера для неклассовых типов (поскольку мы не можем наблюдать, как выполняется копирование). Следующий текст кажется сложнее «обмануть»

Каждый итератор, ссылающийся на элемент в одном контейнере до обмена, должен ссылаться на тот же элемент в другом контейнере после обмена.

Достаточно ли этого для предотвращения реализации небольшой оптимизации буфера для std :: vector? Есть ли какие-то другие препятствия или возможно ли в конечном итоге использовать std :: vector с SBO?

48
задан Johannes Schaub - litb 19 November 2011 в 00:45
поделиться