В C ++ есть правильные строки, так что вы можете их использовать. Они находятся в стандартной строке заголовка. #include <string>, чтобы использовать их. Больше никаких переполнений буфера strcat / strcpy; больше нет пропущенных нулевых терминаторов; больше никакого беспорядочного ручного управления памятью; правильные подсчитанные строки с правильной семантикой значений.
C ++ также может преобразовывать bools в удобочитаемые представления. Мы видели намеки на это ранее в примерах iostream, но они немного ограничены, потому что они могут только выводить текст на консоль (или с fstreams, файл). К счастью, разработчики C ++ не были полными идиотами; у нас также есть iostreams, которые поддерживаются не консолью или файлом, а автоматически управляемым строковым буфером. Их называют струнными потоками. #include <sstream>, чтобы получить их. Тогда мы можем сказать:
std::string bool_as_text(bool b)
{
std::stringstream converter;
converter << std::boolalpha << b;
return converter.str();
}
Конечно, мы не хотим все это печатать. К счастью, в C ++ также есть удобная сторонняя библиотека Boost, которая может нам здесь помочь. У Boost есть замечательная функция lexical_cast. Мы можем использовать это так:
boost::lexical_cast<std::string>(my_bool)
Верно сказать, что это больше накладных расходов, чем какой-либо макрос; строковые потоки имеют дело с языковыми стандартами, которые могут вас не беспокоить, и создают динамическую строку (с выделением памяти), тогда как макрос может выдавать буквальную строку, что позволяет избежать этого. Но с другой стороны, метод stringstream можно использовать для множества преобразований между печатным и внутренним представлениями. Вы можете запустить их назад; boost :: lexical_cast <bool> ("true"), например, поступает правильно. Вы можете использовать их с числами и фактически с любым типом с правильно отформатированными операторами ввода-вывода. Так что они довольно универсальны и полезны.
И если после всего этого ваша профилирование и бенчмаркинга показывает , что lexical_casts являются неприемлемыми узким местом, это когда вы должны рассмотреть возможность сделать некоторые макро ужас.