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

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

Barbara Streisand
Barbara Streisandoriginal
2024-12-20 00:43:09897parcourir

Is a Copy-on-Write std::string Implementation Legal in C  11?

Légalité de la copie sur écriture (COW) std::string Implémentation en C 11

Bien que l'on ait pu croire que COW n'est pas une technique réalisable pour implémenter un std::string conforme en C 11, des discussions récentes ont soulevé des incertitudes. Ce qui suit explore la validité de cette hypothèse basée sur la nouvelle norme.

Interdiction des implémentations std::string basées sur COW en C 11

C 11 interdit explicitement COW -implémentations basées sur std::string. Cette limitation est indiquée dans la section 21.4.1 p6 de la norme, qui autorise l'invalidation des itérateurs/références uniquement dans des circonstances spécifiques :

  • En tant qu'argument d'une fonction de bibliothèque standard qui accepte une référence à un non -const basic_string.
  • Appel de fonctions non membres const, à l'exclusion de l'opérateur[], at, front, back, start, rbegin, end et rend.

Dans une chaîne COW, invoquer un opérateur non const[] nécessite de créer une copie (invalidation des références), ce qui est interdit par le paragraphe susmentionné. Par conséquent, les cordes COW sont interdites en C 11 en raison de cette contrainte.

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!

Déclaration:
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