Maison >développement back-end >C++ >Une implémentation de copie sur écriture de `std::string` est-elle légale en C 11 ?
COW Implémentation de std::string en C 11 : Légalité et restrictions
La copie sur écriture (COW) est une technique souvent utilisé pour améliorer les performances en reportant le coût de création d'un nouvel objet jusqu'à ce qu'il soit réellement modifié. Cependant, on se demande si COW est une approche valide pour implémenter std::string en C 11.
Restriction sur les implémentations COW
Selon la norme C 11 (21.4.1 p6), l'invalidation des itérateurs et des références n'est autorisée que dans des cas spécifiques. circonstances :
Pour une implémentation de chaîne COW, l'invocation d'un opérateur non const[] serait nécessiter d’en faire une copie et d’invalider les références. Ceci est interdit par le paragraphe susmentionné. Par conséquent, l'implémentation de std::string basée sur COW n'est plus considérée comme légale en C 11.
Déclaration explicite de restriction
La norme n'indique pas explicitement que Les implémentations std::string basées sur COW sont interdites. Cependant, la restriction est impliquée par la combinaison d'exigences qui limitent explicitement les scénarios d'invalidation.
Conclusion
Alors que COW était une implémentation viable pour std::string dans les versions antérieures de C , les spécifications C 11 introduisent des contraintes qui interdisent les implémentations basées sur COW en raison de l'invalidation non autorisée des références.
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!