Je me suis récemment renseigné sur les chaînes de caractères immuables. Pourquoi les chaînes de caractères ne peuvent-elles pas être mutables en Java et .NET ? y Pourquoi .NET String est immuable ? ainsi que des informations sur les raisons pour lesquelles D choisit des chaînes immuables. Il semble y avoir de nombreux avantages.
- trivialement thread safe
- plus sûr
- plus efficace en termes de mémoire dans la plupart des cas d'utilisation.
- des sous-chaînes bon marché (tokenizing et slicing)
Sans compter que la plupart des nouveaux langages ont des chaînes immuables, D2.0, Java, C#, Python, etc.
Le C++ bénéficierait-il de chaînes de caractères immuables ?
Est-il possible d'implémenter une classe de chaîne immuable en c++ (ou c++0x) qui aurait tous ces avantages ?
mettre à jour :
Il existe deux tentatives de chaînes de caractères immuables const_string y fix_str . Aucun des deux n'a été mis à jour depuis une demi-décennie. Sont-ils au moins utilisés ? Pourquoi const_string ne s'est jamais retrouvé dans boost ?
42 votes
Un argument très élaboré et convaincant que vous avez fait là, BlueRaja.
6 votes
Eh bien, BlueRaja n'a pas vraiment fait un argument, comme vous l'avez tous si clairement souligné. Mais il pourrait avoir raison, en ce sens que le C++ est peut-être trop un langage hybride pour que les tentatives puristes d'une chaîne de caractères immuable trouvent leur place. Cela en dit plus sur la culture C++ que sur le langage lui-même, bien sûr.
5 votes
Objection ! La chaîne de caractères de Ruby n'est pas immuable !
0 votes
Ils n'ont pas été mis à jour depuis 2005, mais il n'y a pas beaucoup de bogues signalés donc je pense qu'il est possible de l'utiliser.