Warum std :: vector :: push_back den Zuweisungsoperator benötigt

8
%Vor%

erfordert, dass der Typ T gemäß dies CopyInsertable ist.

Allerdings kompilieren Sie das folgende Programm mit failes ( clang , GCC, Visual; beide ohne c ++ 11 ), sofern ich keinen öffentlichen Zuweisungsoperator zur Verfügung stelle.

%Vor%

Warum muss ich diesen Zuweisungsoperator bereitstellen? Ich hatte den Eindruck, dass das Kopierkonstrukt ausreichend war.

P.S. Ich konnte nicht den Platz im Standard finden, wo dies definiert ist, also wenn Sie auf die Referenz verweisen könnten, wäre ich sehr dankbar

    
ToBe 03.09.2014, 08:24
quelle

1 Antwort

11

Die Referenz, die Sie angeben , gilt für C ++ 11. Der C ++ 03-Standard hat jedoch strengere Anforderungen an Typen, die in Containern gespeichert werden können:

  

23.1 Containeranforderungen [lib.container.requirements]

     

...

     

Der Typ der Objekte, die in diesen Komponenten gespeichert sind, muss den   Anforderungen von CopyConstructible-Typen (20.1.3) und der zusätzlichen   Anforderungen von Zuweisbare -Typen.

(Hervorhebung von mir.) Diese Anforderungen wurden in C ++ 11 stark gelockert und beziehen sich normalerweise auf die spezifischen Operationen, die an Containern ausgeführt werden. In diesem Standard wäre Ihr Code gültig, da die einzige Voraussetzung wäre, dass A be CopyInsertable ist.

    
juanchopanza 03.09.2014, 08:35
quelle

Tags und Links