Maison > développement back-end > C++ > Quand « reinterpret_cast » crée-t-il réellement des objets ?

Quand « reinterpret_cast » crée-t-il réellement des objets ?

Mary-Kate Olsen
Libérer: 2024-12-09 19:41:11
original
457 Les gens l'ont consulté

When Does `reinterpret_cast` Actually Create Objects?

Reinterpret_cast et les constructeurs par défaut triviaux : un voyage vers un comportement indéfini

La documentation cppreference affirmait un jour que des objets triviaux constructibles par défaut pouvaient être créés en utilisant reinterpret_cast sur une mémoire correctement alignée. Cependant, cette affirmation a depuis été révisée pour souligner la nécessité d'utiliser placement-new pour initialiser explicitement de tels objets.

Le mystère de la vie

Si reinterpret_cast créait des objets , nous serions confrontés à un dilemme concernant leur durée de vie. L’opération de casting elle-même marquerait-elle la naissance de l’objet ? Ou cela se produirait-il plus tôt, lorsque le stockage était alloué avec une expression comme alignas(X) char buffer[sizeof(X)] ?

Dans ce dernier cas, cela soulève la possibilité intrigante qu'une instruction conditionnelle entre le stockage l'allocation et le casting pourraient potentiellement construire soit un objet X, soit une autre entité trivialement constructible par défaut, Y.

Les conseils de clarification du Standard

Malheureusement, le standard C exclut explicitement une telle création d'objets amorphes. Selon [intro.object]/1, les objets ne peuvent naître que par une définition, une nouvelle expression, l'activation d'un membre actif d'un syndicat ou la création d'un objet temporaire.

Pas même une existence vide

La notion de durée de vie d'initialisation vide n'est pas pertinente dans cette situation. Pour que ce concept s'applique, un objet doit d'abord exister, ce qui n'est pas le cas ici.

Consistemment indéfini

Tout au long de l'histoire de C , le comportement de reinterpret_casting est trivial les objets constructibles par défaut sont restés systématiquement indéfinis. C 11 et C 1z adhèrent au principe fondamental selon lequel des objets distincts doivent avoir des adresses distinctes, ce qui fait de la création de plusieurs objets dans le même stockage un paradoxe félin de Schrödinger.

Conclusion

L'opération reinterpret_cast n'est pas un outil magique pour créer des objets. En tentant d'invoquer ses pouvoirs créatifs, les programmeurs risquent d'invoquer un comportement indéfini et de plonger leur code dans les profondeurs perfides de l'imprévisibilité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal