Вставка по умолчанию в вектор не является инициализацией по умолчанию?

Один изstd::vector Конструкторы оговариваются как, акцент мой:

explicit vector(size_type n, const Allocator& = Allocator());
Последствия: Создаетvector сn по умолчанию вставленными элементы, использующие указанный распределитель.
Требуется: T должен бытьDefaultInsertable в*this.
Сложность: Линейный вn.

Связана ли установка по умолчанию с инициализацией по умолчанию? По этому коду:

std::vector<char> v(66000);

Оптимизированный gcc 5.2 производит:

  400d18:   bf d0 01 01 00          mov    $0x101d0,%edi
  400d1d:   48 83 c5 01             add    $0x1,%rbp
  400d21:   e8 1a fd ff ff          callq  400a40 <operator new(unsigned long)@plt>
  400d26:   31 f6                   xor    %esi,%esi
  400d28:   48 89 c3                mov    %rax,%rbx
  400d2b:   ba d0 01 01 00          mov    $0x101d0,%edx
  400d30:   48 89 c7                mov    %rax,%rdi
  400d33:   e8 38 fc ff ff          callq  400970 <memset@plt>

memset? Чтовы делаешь здесь? Я думал, что это должно просто сделать эквивалентnew char[66000]... то есть без инициализации. Clang 3.7 также испускаетmemset.

Почему естьmemset Вот? Это правильно по отношению к стандарту? В конце концов, если бы я хотел 66000 инициализированных значением символов, у меня уже есть этот конструктор:

std::vector<char> v(66000, '\0');

Ответы на вопрос(1)

Ваш ответ на вопрос