Exceptions Utilisez le type statique d'un objet à copier-initialiser em> l'objet lancé. Par exemple: clang ++ --std = c ++ 14 code> se plaint que le constructeur de copie explicitement supprimé ne peut pas être utilisé. Pourquoi ne peut-il pas être initialisé à la place? P> p>
4 Réponses :
parce que foo (foo &&); code> est manquant. Par
Supprimer code> ING Le constructeur de copie Vous avez également superposé le constructeur de déplacement. P>
Le constructeur de déplacement n'est pas supprimé, juste absent.
@Jonathanwakely Qu'est-ce qui est "non supprimé, manquant"? Suppression de Copy Constructor supprime implicitement le constructeur de déplacement également
@Jonathanwakely: deux sens légèrement différents de "supprimés". Je pense mieux être explicite ce que l'on peut et ne peut pas faire. Comme définissant un constructeur de mouvement.
@ Sergeya, non, ça ne le fait pas. Un constructeur de déplacement supprimé participerait à la résolution de la surcharge. Un absent on ne le fait pas. La différence est importante.
@ Cheersandhth.-ALF, puisque "Supprimé" est un terme technique défini par la norme C ++, il est préférable d'éviter d'utiliser ce mot pour signifier "pas présent", non?
Eh bien, oui, je suis d'accord avec ça. Je pense juste que aussi i>, votre commentaire était un peu perplexe à Sergeya. ;-)
Il ne peut pas être bougé construit car le type n'a pas de constructeur de déplacement. Un constructeur de copie supprimé supprime le constructeur de déplacement implicite. P>
Modifiez le code ci-dessous:
struct foo { foo() = default; foo(const foo&) = delete; foo(foo&&) = default; }; int main() { throw foo(); }
Le phrasé applicable de la norme (§ [CLASS.COPY] / 9) semble grossièrement celui-ci (bien, exactement comme celui-ci, à partir de N4296): P>
Si la définition d'une classe X ne déclare pas explicitement un constructeur de déplacement, on sera implicitement déclaré comme défaut si et seulement si: p>
- x n'a pas de copie déclarée par l'utilisateur CTOR, LI> ul> blockQuote>
[...] p>
Ceci s'applique car la définition de la copie CTOR comme supprimée signifie toujours que vous avez déclaré la copie CTOR. P>
Je ne peux plus le supprimer car il a des réponses mais je vote pour fermer comme étant hors sujet en raison d'une "erreur typographique simple". Mon problème n'était pas aussi trivial que celui-ci, mais j'ai clairement oublié de créer un constructeur de mouvement.
Grâce à votre question, j'ai appris quelque chose. S'il vous plaît ne voterez pas pour le fermer, et de tout aucun moyen de ne pas le supprimer !!