Почему интерфейс конструктора std::vector изменился с С++ 11?
Почему был удален аргумент по умолчанию с новым стандартом? Часто я построил векторную переменную следующим образом: std::vector<my_pod_struct> buf(100)
. Я предполагаю, что получаю ошибку компилятора с компилятором С++ 11.
explicit vector( size_type count,
const T& value = T(), /* until C++11 */
const Allocator& alloc = Allocator());
vector( size_type count,
const T& value, /* since C++11 */
const Allocator& alloc = Allocator());
Ответы
Ответ 1
До того, как вы написали std::vector<T> buf(100);
, вы получите один построенный по умолчанию T
, а затем этот экземпляр будет скопирован до ста слотов в векторе.
Теперь, когда вы пишете std::vector<T> buf(100);
, он будет использовать другой конструктор: explicit vector( size_type count );
. По умолчанию будет построено сто T
s. Это небольшая разница, но важная.
Новый конструктор с одним аргументом не требует копирования типа T
. Это важно, потому что теперь типы могут перемещаться и не копироваться.
Ответ 2
Вы не будете, теперь есть отдельный конструктор для вашего варианта использования:
explicit vector(size_type n);