Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Frequently Asked Questions

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 19. Boost.Lexical_Cast 1.0

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
  • Вопрос:Почему<lexical_cast<int8_t>("127")>бросает<bad_lexical_cast>?
    • Ответ:Тип<int8_t>— от<typedef>до<char>или<signed char>. Лексическое преобразование в эти типы - это просто чтение байта из источника, но поскольку источник имеет более одного байта, исключение бросается. Пожалуйста, используйте другие типы целых чисел, такие как<int>или<shortint>. Если проверка границ важна, вы также можете позвонить.<boost::numeric_cast>:<numeric_cast<int8_t>(lexical_cast<int>("127"));>

  • Вопрос:Почему<lexical_cast<unsignedchar>("127")>бросает<bad_lexical_cast>?
    • Ответ:Лексическое преобразование в любой тип шара — это просто чтение байта из источника. Но так как источник имеет более одного байта, исключение бросается. Пожалуйста, используйте другие целые типы, такие как<int>или<shortint>. Если проверка границ важна, вы также можете позвонить<boost::numeric_cast>:<numeric_cast<unsignedchar>(lexical_cast<int>("127"));>

  • Вопрос:Что делать (42) из<int8_t>или<uint8_t>не так, как я ожидаю?
    • Ответ:Обратите внимание, что int8_t и uint8_t на самом деле являются проводниками и отформатированы как таковые. Чтобы избежать этого, сначала отбрасывайте на целочисленный тип:<lexical_cast<std::string>(static_cast<int>(n));>

  • Вопрос:Реализация всегда сбрасывает флаг<ios_base::skipws>базового объекта потока. Он ломает мой<operator>>>, который работает только при наличии этого флага. Можете ли вы удалить код, который сбрасывает флаг?

  • Вопрос:Почему<std::cout<<boost::lexical_cast<unsignedint>("-1");>не бросает, а выводит 4294967295?
    • Ответ:<boost::lexical_cast>имеет поведение<std::stringstream>, которое использует<num_get>функции<std::locale>для преобразования чисел. Если мы посмотрим на языки программирования — C++, мы увидим, что<num_get>использует правила<scanf>для конверсий. И в стандарте C99 для неподписанного входного значения минус знак является необязательным, поэтому, если прочитано отрицательное число, не возникнет ошибок и результатом будет дополнение двух.

  • Вопрос:Почему<boost::lexical_cast<int>(L'A');>выводит 65, а<boost::lexical_cast<wchar_t>(L"65");>не бросает?
    • Ответ:Если вы используете старую версию Visual Studio или компилируете код с флагом /Zc:wchar_t,<boost::lexical_cast>видит одиночный<wchar_t>символ<unsignedshort>. Это не ошибка<boost::lexical_cast>, а ограничение параметров компилятора, которые вы используете.

  • Вопрос:Почему<boost::lexical_cast<double>("-1.#IND");>бросает<boost::bad_lexical_cast>?
    • Ответ:<"-1.#IND">является расширением компилятора, что нарушает стандарт. Вы должны ввести<"-nan">,<"nan">,<"inf">,<"-inf">(случай нечувствительный) строки, чтобы получить значения NaN и Inf.<boost::lexical_cast<string>>выводит<"-nan">,<"nan">,<"inf">,<"-inf">строки, когда имеет значения ввода NaN или Inf.

  • Вопрос:Как быстрее всего преобразовать ненулевую законченную строку или подстроку, используя<boost::lexical_cast>?
    • Ответ:Используйте<boost::iterator_range>для преобразования или<lexical_cast>перегрузки с двумя параметрами. Например, если вы хотите преобразовать в<int>два символа из строки<str>, вы должны написать<lexical_cast<int>(make_iterator_range(str.data(),str.data()+2));>или<lexical_cast<int>(str.data(), 2);>.

PrevUpHomeNext

Статья Frequently Asked Questions раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 19. Boost.Lexical_Cast 1.0 может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 19. Boost.Lexical_Cast 1.0 ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:22:23/0.029099941253662/1