Почему интерфейс конструктора std :: vector был изменен в C ++ 11? - PullRequest
23 голосов
/ 20 января 2012

Почему аргумент по умолчанию был удален с новым стандартом?Часто я создавал векторную переменную так: std::vector<my_pod_struct> buf(100).Я думаю, что я получил бы ошибку компилятора с компилятором C ++ 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());

Ответы [ 2 ]

50 голосов
/ 20 января 2012

Раньше, когда вы писали std::vector<T> buf(100);, вы получали один T построенный по умолчанию, а затем этот экземпляр копировался в сто слотов в векторе.

Теперь, когда вы пишете std::vector<T> buf(100);, он будет использовать другой конструктор: explicit vector( size_type count );.Это создаст по умолчанию сто T с.Это небольшое отличие, но важное.

Новый конструктор с одним аргументом не требует, чтобы тип T был копируемым.Это важно, потому что теперь типы могут быть перемещаемыми и не копируемыми.

3 голосов
/ 20 января 2012

Вы не будете, теперь есть отдельный конструктор для вашего варианта использования:

explicit vector(size_type n);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...