Подтвердить что ты не робот

Почему интерфейс конструктора 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());
4b9b3361

Ответ 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);