Was ist der Zweck von boost::to_string
(gefunden in boost/exception/to_string.hpp
) und wie unterscheidet es sich von boost::lexical_cast<std::string>
und std::to_string
?Was ist der Unterschied zwischen std :: to_string, boost :: to_string und boost :: lexical_cast <std::string>?
Antwort
std::to_string
, verfügbar seit C++ 11, funktioniert auf grundlegende numerische Typen speziell. Es hat auch eine std::to_wstring
Variante.
Es wurde entwickelt, um die gleichen Ergebnisse zu produzieren, die std::sprintf
würde.
Sie können dieses Formular auswählen, um Abhängigkeiten von externen Bibliotheken/Kopfzeilen zu vermeiden.
boost::lexical_cast<std::string>
Arbeiten auf jede Art, die in eine std::ostream
eingesetzt werden kann, einschließlich der Typen aus anderen Bibliotheken oder Ihren eigenen Code.
Optimierte Spezialisierungen gibt es für gängige Typen, mit der generischen Form ähnelt:
template< typename OutType, typename InType >
OutType lexical_cast(const InType & input)
{
std::stringstream temp_stream;
temp_stream << input;
OutType output;
temp_stream >> output;
return output;
}
Sie dieses Formular können größere Flexibilität bei der Input-Typen in generischen Funktionen nutzen, oder eine std::string
von einem Typ, den Sie produzieren Know ist kein fundamentaler numerischer Typ.
boost::to_string
nicht direkt dokumentiert und scheint in erster Linie für den internen Gebrauch zu sein. Seine Funktionalität verhält sich wie lexical_cast<std::string>
, nicht std::to_string
.
gibt es mehr Unterschiede: Boost funktioniert richtig! Bitte beachten Sie den folgenden Code:
#include <limits>
#include <iostream>
#include "boost/lexical_cast.hpp"
int main()
{
double maxDouble = std::numeric_limits<double>::max();
std::string str(std::to_string(maxDouble));
std::cout << "std::to_string(" << maxDouble << ") == " << str << std::endl;
std::cout << "boost::lexical_cast<std::string>(" << maxDouble << ") == "
<< boost::lexical_cast<std::string>(maxDouble) << std::endl;
return 0;
}
$ ./to_string
std::to_string(1.79769e+308) == 179769313486231570814527423731704356798070600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
boost::lexical_cast<std::string>(1.79769e+308) == 1.7976931348623157e+308
Bitte tun Sie etwas mehr als nur etwas Code einzufügen. Beschreibe * was * dein Code macht und * wie * er es tut. –
Es ist einfach die Ausgabe von to_string() und lexical_cast() für den gleichen doppelten Wert ;-)) –
Diese Ergebnisse unterscheiden sich sicherlich - und das ist es wert. Aber mir ist nicht klar, welches Ergebnis "richtiger" ist. –
- 1. Was ist der Unterschied zwischen Boost Smartpointern und Std Smartpointern?
- 2. Kombinieren boost :: lexical_cast und std :: transformieren
- 3. Fallback to_string() wenn operator <<() fehlschlägt
- 4. boost :: lexical_cast und doppelt - seltsames Verhalten
- 5. Die Genauigkeit von std :: to_string (double)
- 6. Was ist der Unterschied zwischen boost :: pool <> :: malloc und boost :: pool <> :: ordered_malloc, und wann sollte ich boost :: pool <> :: ordered_malloc verwenden?
- 7. Was ist der Unterschied zwischen Boost :: bind und Boost Phoenix :: bind?
- 8. to_string ist kein Mitglied von Std, sagt so g ++ termux
- 9. Cygwin: g ++ 5.2: 'to_string' ist kein Mitglied von 'std'
- 10. Was ist der Unterschied zwischen boost :: container :: vector und std :: vector
- 11. Unterschied zwischen C++ 11 Std :: Bind und Boost :: Bind
- 12. boost :: bind und std ::
- 13. Konvertierung zwischen std :: tuple und boost :: tuple
- 14. Unterschied zwischen pthread_spinlock und boost :: smart_ptr :: spinlock?
- 15. Unterschied zwischen boost :: ref und regulären Referenzen
- 16. Unterschied zwischen irange und counting_range in Boost
- 17. Machen std :: to_string Arbeit mit Void-Zeiger likes Operator <<?
- 18. C++ 11 std :: to_string (double) - Keine abschließenden Nullen
- 19. Was ist der Unterschied zwischen std :: cout und std :: wcout?
- 20. Was ist der Unterschied zwischen std :: set und std :: map
- 21. Was ist der Unterschied zwischen std :: partial_sum und std :: inclusive_scan?
- 22. Was ist der Unterschied zwischen std :: function und std :: mem_fn
- 23. boost :: Variante <T> std :: string
- 24. boost :: any_cast und std :: optional ist
- 25. Wie kann ich boost :: lexical_cast mit folly :: fbstring verwenden?
- 26. In ASP.Net, was ist der Unterschied zwischen <% = und <% #
- 27. Was ist der Unterschied zwischen Ofstream "<<" und Schreiben
- 28. Was ist der Unterschied zwischen <%# %> und <%= %>?
- 29. Was ist der Unterschied zwischen <% %> und <%=%>?
- 30. Was ist der Unterschied zwischen << und + =?
Wenn ich die Geschichte richtig erinnere, 'boost :: to_string' vorangegangen' std :: to_string', wie es in der Regel der Fall ist. Boost ist eher der Spielplatz für Dinge, bevor es in die Standardbibliothek aufgenommen wird. 'std :: to_string' ist neu ab C++ 11. – CoryKramer
@ Cyber: Ich würde vorschlagen, Sie schreiben dies als (Teil-) Antwort. – MikeMB
@CoryKramer, 'boost :: to_string' könnte älter sein, aber es ist nicht dasselbe wie' std :: to_string' und 'std :: to_string' basierte nicht darauf (sie benutzen zufällig denselben Namen). –