Standard-Einfügen in einen Vektor ist keine Standard-Initialisierung?
Einer derstd::vector
Konstruktoren ist festgelegt als, Schwerpunkt meiner:
explicit vector(size_type n, const Allocator& = Allocator());
Auswirkungen Konstruiert einvector
mitn
default-insert Elemente mit dem angegebenen Zuweiser.
Erfordert: T
mussDefaultInsertable
in*this.
Komplexität Linear inn
.
Ist die Standardeinfügung in irgendeiner Weise mit der Standardinitialisierung verbunden? Auf diesem Code:
std::vector<char> v(66000);
gcc 5.2 optimiert ergibt:
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
? Was sindSi hier machen? Ich dachte, dies sollte einfach das Äquivalent von @ tnew char[66000]
... das heißt, keine Initialisierung. clang 3.7 gibt auch ein @ amemset
.
Warum gibt es einmemset
Hier? Ist dies in Bezug auf den Standard korrekt? Wenn ich 66000 wertinitialisierte Zeichen haben wollte, habe ich doch schon diesen Konstruktor:
std::vector<char> v(66000, '\0');