Je suis actuellement en train d'utiliser le package très intelligent ne fonctionne pas à moins que nous forcions qui compile et fonctionne comme prévu. J'ai ajouté la ligne suivante à ceci devrait améliorer les performances sur boost :: const_string code>
jusqu'à ce que http://libcxx.llvm.org/ est disponible pré-emballé sur Ubuntu ou GCC faire son __Versa_string code> (dans l'en-tête
ext / vstring.h code>) sa mise en œuvre de chaîne par défaut.
STD :: String CODE> ASWELL AS
__ VERSA_STRING CODE> Utilise l'optimisation de la chaîne (SSO) par défaut. Prise en charge par défaut pour la sortie d'un
std :: ostream code> manque cependant. Le code
x code> dans une chaîne C via
c_str () code> qui devient p> < Pré> xxx pré>
const_string.hpp code> p>
x.c_str () code> parce que < Code> Taille () Code> est déjà connu et n'a pas besoin d'être calculé en recherchant
null code> comme dans
c_str () code>. Je travaille pour moi mais je suis incertain si cela fonctionne tous les cas. Ai-je manqué quelque chose? P> p>
3 Réponses :
Il semble que cela puisse avoir des conséquences basées sur les paramètres régionaux et / ou des facettes appliquées au flux de chaînes vs qui écrivent les données droites comme vous le faites. P>
Ce serait moins performant, mais qu'en est-il de créer une STD :: String de la const_string et en utilisant <<< / code> pour insérer cela dans le flux? P>
Merci pour vos commentaires. Comment puis-je prendre en charge les paramètres locaux alors?
Non (vous n'avez rien oublié, Afaik). Si votre objectif est de ne pas copier sur le contenu, str.data () est la voie à suivre. P>
ai-je manqué quelque chose? P>
Oui, il suffit d'inclure
const_string / io.hpp code>. Tout ce qui est cependant: p>
xxx pré> blockQuote>
Est-ce aussi rapide que mon alternative?
@ Nordlöw: très probable, par exemple Il construit un basic_string code> - mais encore une fois, vous n'avez pas à gérer les local et al. Quoi qu'il en soit, je le mesurerais si cela compte vraiment dans votre demande.
Cela dépend de quel comportement que vous souhaitez pour des caractères non imprimables (en particulier
\ 0 code>), je suppose. Je pense (!) Le comportement par défaut des chaînes normales est de tronquer après des caractères nuls. Votre mise en œuvre ne le fera probablement pas. Au fait, +1 pour me faire prendre conscience de
boost :: const_string code>.
Je pense que c'est une sorte de compromis. Pour autant que je sache, votre code ne reflète pas les paramètres de manipulateur comme
std :: setw code>. Si vous n'utilisez pas ces manipulateurs pour
const_string code>, je pense que votre code a son propre usage.