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!