2012-03-29 3 views
4

J'utilise la bibliothèque Boost pour implémenter mon application. Tous les caractères chaîne dans le modèle de données de mon application sont des caractères larges (type wchar_t). Mais dans la bibliothèque boost, certaines classes ne transmettent que le caractère étroit (type char), c'est-à-dire "address boost::asio::ip::address::from_string(const char* str)". J'ai donc besoin de faire la conversion entre std :: string et std :: wstring quand on appelle les fonctions boost.wstring string converter dans Boost

  1. Y at-il un problème de performance dû aux conversions de chaîne?
  2. Dans là le convertisseur dans Boost, qui fait la conversion entre std :: wstring et std :: string avec de bonnes performances?

MISE À JOUR

En ce qui concerne la fonction de conversion. Je trouve le code ci-dessous fonctionne.

std::wstring wstr(L"Hello World"); 
const std::string nstr(wstr.begin(), wstr.end()); 
const std::wstring wstr2(nstr.begin(), nstr.end()); 
+3

J'espère que vous n'avez pas de caractères non-ascii dans vos chaînes ... – Eugene

Répondre

3

Ajouter moi-même la conclusion de la recherche.

En ce qui concerne les performances de la conversion de chaîne. J'ai débogué dans les fonctions ci-dessus. La conversion est implémentée par le char C-cast par char. La complexité temporelle est O (L), L est la longueur de la chaîne. Dans mon application, les chaînes à convertir ne sont pas très longues. Donc, je ne pense pas qu'il y ait une latence de performance évidente due aux conversions.

Questions connexes