8
votes

Le constructeur de déplacement ne peut pas être fait défaut

Je suis nouveau à C ++ 11 et écrit la classe suivante où j'aimerais pouvoir prendre en charge std :: déplacer : xxx

Cependant, quand je Compiler avec l'option -std = c ++ 0x , le compilateur se plaint: xxx

mes questions sont les suivantes:

  1. ai-je fait quelque chose de mal qui désactive la classe x d'avoir un constructeur de déplacement par défaut?
  2. Dans le cas où il existe une classe que nous ne pouvons vraiment pas refuser son constructeur de mouvement, puis-je savoir comment devrais-je développer son constructeur de mouvement?

    merci,


3 commentaires

-std = c ++ 11, thats


Ceci est un bug dans votre - je suppose vieux - compilateur. G ++ Même aussi vieux que 4.6.4 compile le programme sans plainte . Essayer d'apprendre C ++ 11 avec un compilateur si vieux qu'il utilise -std = c ++ 0x au lieu de -std = c ++ 11 sera probablement très difficile . Essayez de mettre à jour une version récente du compilateur.


Merci beaucoup pour vos commentaires!


3 Réponses :


2
votes

Comme les commentaires suggèrent, l'erreur a été provoquée par une option incorrecte du compilateur. Option -STD = c ++ 11 doit être utilisé. (Notez qu'il est minuscule au lieu des majuscules, sinon le compilateur se plaint de ce qui suit): XXX


1 commentaires

Voir Info GCC Pour plus d'informations la prochaine fois. Il donne une rupture assez approfondie sur la différence entre les options. Bien que je comprends que cela soit déroutant avec les versions du compilateur et la manière dont il affecte les drapeaux, une combinaison de la prise en charge de la version de la version GCC C ++ 11, info GCC et homme GCC Est tout ce dont vous avez besoin vraiment.



1
votes

Ce code est compilé par GCC 4,8,1

Aussi la norme C ++ présente l'exemple suivant P>

struct trivial {
trivial() = default;
trivial(const trivial&) = default;
trivial(trivial&&) = default;
trivial& operator=(const trivial&) = default;
trivial& operator=(trivial&&) = default;
~trivial() = default;
};


2 commentaires

@keelar J'utilise www.ideone.com où toutes les options du compilateur qui compilent le code que C ++ 11 sont déjà définies.


@Keeler G ++ doit compiler dans le mode GNU ++ 98 par défaut.