Когда я должен использовать Boox’s lexical_cast? Это механизм последнего

Повышение-х lexical_cast, который преобразует числа (или произвольные объекты) в строки и обратно. Должен ли я использовать это больше, скажем, вместо того, чтобы передавать std::stringstreams? Или это скорее механизм последней инстанции?

Вот один пример двух альтернативных подходов:

std::stringstream message;
message << "foo " << bar << ' ' << baz;
doSomething(message.str());

или же

doSomething("foo " + lexical_cast<string>(bar) + " " + lexical_cast<string>(baz));

(но обратите внимание, мой вопрос носит более общий характер).

1

Решение

Лексическое приведение не «в основном» конвертирует числа. Это механизм для всего, что связано с текстом. И да, это зависит. Я свободно использую lexical_cast, но я без колебаний использую std :: stoi, std :: to_string, Boost {Spirit | Format | Serializaton} в зависимости от варианта использования.

Короче говоря: это не механизм последней инстанции. Это также не конец, все-быть-все решение.


Фон

  • Распространенным возражением было то, что lexical_cast будет медленным. Это редко случается (больше), так как он был специализирован для общих примитивных типов
  • Интерфейс lexical_cast подходит только тогда, когда синтаксический анализ никогда не должен / редко происходит сбой; в противном случае предпочтите интерфейс, который сообщает об ошибках проверки ввода без исключений
1

Другие решения

Я бы сказал, что вы всегда должны использовать lexical_cast при преобразовании строки в число, потому что без него вы не узнаете, действительно ли это было число или нет (исключение неправильного лексического приведения). Поток строк ничего не выбрасывает и оставляет число неинициализированным.

0

По вопросам рекламы [email protected]