J'ai du mal à comprendre le paragraphe suivant cité dans cppreference sur le constructeur par défaut trivial. J'ai recherché stackoverflow mais je n'ai toujours pas obtenu de réponse claire. Alors s'il vous plaît, aidez-moi.
Un constructeur par défaut trivial est un constructeur qui n'effectue aucune action. Tous les types de données compatibles avec le langage C (types POD) sont trivialement constructibles par défaut. Contrairement à C, cependant, les objets avec des constructeurs par défaut triviaux ne peuvent pas être créés en réinterprétant simplement le stockage correctement aligné, comme la mémoire allouée avec std :: malloc: placement-new est requis pour introduire formellement un nouvel objet et éviter un comportement potentiellement indéfini.
Plus précisément, si le constructeur par défaut trivial ne fait rien, pourquoi ne pouvons-nous pas réinterpréter le stockage et prétendre qu'il existe un objet avec le type donné? Pourriez-vous s'il vous plaît fournir quelques exemples pour le comportement non défini potentiel que cela pourrait provoquer?
*reinterpret_cast<float*>(&someNonFloatObject) = 0.1f;
. C ++ a un concept d'objets et de durées de vie d'objet, spécifié sur la machine abstraite, et ce n'est pas parce qu'il n'y a pas d'instructions CPU pour créer un objet à partir du stockage qu'il n'y a pas de différence sur la machine abstraite.