Jaki jest cel boost::to_string
(znaleziony w boost/exception/to_string.hpp
) i jak różni się on od boost::lexical_cast<std::string>
i std::to_string
?Jaka jest różnica między std :: to_string, boost :: to_string i boost :: lexical_cast <std::string>?
Jaka jest różnica między std :: to_string, boost :: to_string i boost :: lexical_cast <std::string>?
Odpowiedz
std::to_string
, dostępny od C++ 11, działa na podstawowych typach numerycznych w szczególności. Ma również wariant std::to_wstring
.
Został zaprojektowany w taki sposób, aby uzyskać takie same wyniki, jak w przypadku std::sprintf
.
Możesz wybrać ten formularz, aby uniknąć zależności od zewnętrznych bibliotek/nagłówków.
boost::lexical_cast<std::string>
prace nad dowolny typ, który można włożyć do std::ostream
, w tym z innych typów bibliotek lub własnego kodu.
Zoptymalizowane specjalizacje istnieć dla popularnych typów, z formą generic przypominające:
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;
}
może wybrać tę formę wykorzystać większą elastyczność typów wejść w funkcji generycznych lub do wytworzenia std::string
od typu, który cię know nie jest podstawowym typem liczbowym.
boost::to_string
nie jest bezpośrednio udokumentowany i wydaje się być głównie do użytku wewnętrznego. Jego funkcjonalność zachowuje się jak lexical_cast<std::string>
, a nie std::to_string
.
jest więcej różnic: boost działa poprawnie! Proszę wziąć pod uwagę następujący kod:
#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
Proszę, zrób coś więcej niż tylko wklejanie kodu. Opisz * co * twój kod robi i * jak * to robi. –
To jest proste wyjście funkcji to_string() i lexical_cast() dla tej samej podwójnej wartości ;-)). –
Te wyniki z pewnością różnią się - i warto to zauważyć. Ale nie jest dla mnie oczywiste, który wynik jest bardziej "właściwy". –
- 1. Jak korzystać z boost :: lexical_cast i std :: boolalpha? tj boost :: lexical_cast < bool > ("true")
- 2. Kombajny boost :: lexical_cast i std :: przekształcić
- 3. Jaka jest różnica między Boost :: bind a Boost Phoenix :: bind?
- 4. Jaka jest różnica między boost :: io_service poll_one i run_one?
- 5. boost :: lexical_cast nieuznawanie przeciążony operator istream
- 6. Jaka jest różnica między boost :: pool <> :: malloc i boost :: pool <> :: ordered_malloc, a kiedy powinienem użyć boost :: pool <> :: ordered_malloc?
- 7. Różnica między boost :: ref i regularnymi referencjami
- 8. różnica między pthread_spinlock i boost :: smart_ptr :: spinlock?
- 9. Jaka jest różnica między << i + =?
- 10. Jaka jest różnica między "mutex" i "lock"?
- 11. Ustaw dokładność std :: to_string przy konwersji wartości zmiennoprzecinkowych
- 12. Różnica między boost :: shared_ptr i std :: shared_ptr ze standardowego pliku <memory>
- 13. boost :: ptr_container i std :: vector <shared_ptr>
- 14. Fallback to to_string(), gdy operator <<() zawiedzie
- 15. Jaka jest różnica między std :: condition_variable i std :: condition_variable_any?
- 16. Jaka jest różnica między :: std :: string i std :: string?
- 17. Jaka jest różnica między std :: cout i std :: wcout?
- 18. Tworzenie zdefiniowanej przez użytkownika klasy std :: to_string (stanie)
- 19. Jaka jest różnica między inteligentnymi wskaźnikami Boost a standardowymi inteligentnymi wskaźnikami?
- 20. C++ 11 std :: to_string (podwójne) - Bez końcowych zer
- 21. boost :: wariant; std :: unique_ptr i skopiuj
- 22. boost :: exception_detail :: clone_impl <boost :: exception_detail :: error_info_injector <boost :: thread_resource_error>>
- 23. Jakie są kompromisy między boost :: locale i std :: locale?
- 24. W ASP.Net, jaka jest różnica między <% = i <% #
- 25. Jaka jest różnica między <% # i <% = w ASP.NET MVC?
- 26. Jaka jest różnica między <%# %> i <%= %>?
- 27. Jaka jest różnica między tagami otwierającymi <% # i <% = otwierającymi?
- 28. Jaka jest różnica między tcp :: endpoint i udp :: endpoint w Boost :: Asio?
- 29. Czy przesłanianie std :: to_string dla zdefiniowanych przez użytkownika wylicza właściwy sposób dostarczania to_string dla zdefiniowanych przez użytkownika wyliczeń?
- 30. Jaka jest różnica między "<>" a "! ="?
Jeśli dobrze pamiętam historię, 'boost :: to_string' poprzedziło' std :: to_string', jak to zwykle bywa. Wzmocnienie wydaje się być placem zabaw dla rzeczy zanim zostanie przyjęte do standardowej biblioteki. 'std :: to_string' jest nowością od C++ 11. – CoryKramer
@Cyber: Proponuję napisać to jako (częściową) odpowiedź. – MikeMB
@CoryKramer, 'boost :: to_string' może być starszy, ale to nie to samo co' std :: to_string' i 'std :: to_string' nie był na nim oparty (po prostu używają tej samej nazwy). –