Maison > développement back-end > C++ > Une implémentation de copie sur écriture de `std::string` est-elle légale en C 11 ?

Une implémentation de copie sur écriture de `std::string` est-elle légale en C 11 ?

Patricia Arquette
Libérer: 2024-12-15 03:28:08
original
811 Les gens l'ont consulté

Is a Copy-on-Write Implementation of `std::string` Legal in 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 :

  • Lorsqu'il est passé en argument à une fonction de bibliothèque standard qui prend une référence à une chaîne de base non const.
  • Lors de l'appel de fonctions membres non const, à l'exclusion de l'opérateur[], at, front, back, start, rbegin, end et rend.

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!

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