C ++ має належні рядки, тому ви можете їх використовувати. Вони знаходяться в стандартному рядку заголовка. #include <string>, щоб використовувати їх. Більше немає перевищення буфера strcat / strcpy; більше немає відсутніх нульових термінаторів; відсутність безладного ручного управління пам'яттю; правильні підраховані рядки з належною семантикою значень.
С ++ також має можливість перетворювати були в читабельні подання. Ми бачили натяки на це раніше на прикладах iostream, але вони дещо обмежені, оскільки вони можуть передавати текст лише на консоль (або з файлом fstreams). На щастя, дизайнери C ++ не були повними ідіотами; ми також маємо iostream, які підтримуються не консоллю чи файлом, а автоматично керованим буфером рядків. Їх називають струнними потоками. #include <sstream>, щоб отримати їх. Тоді ми можемо сказати:
std::string bool_as_text(bool b)
{
std::stringstream converter;
converter << std::boolalpha << b; // flag boolalpha calls converter.setf(std::ios_base::boolalpha)
return converter.str();
}
Звичайно, ми не дуже хочемо все це друкувати. На щастя, у C ++ також є зручна стороння бібліотека під назвою Boost, яка може нам тут допомогти. Boost має приємну функцію, яка називається lexical_cast. Ми можемо використовувати його таким чином:
boost::lexical_cast<std::string>(my_bool)
Тепер вірно стверджувати, що це вищі накладні витрати, ніж деякі макроси; stringstreams мають справу з локалями, які вам можуть не хвилювати, і створюють динамічний рядок (з виділенням пам'яті), тоді як макрос може дати буквальний рядок, який цього уникає. Але з іншого боку, метод stringstream може бути використаний для великої кількості перетворень між друкуваними та внутрішніми поданнями. Ви можете запустити їх назад; boost :: lexical_cast <bool> ("true") робить правильно, наприклад. Ви можете використовувати їх із цифрами та фактично будь-яким типом із правильно відформатованими операторами вводу-виводу. Тож вони досить універсальні та корисні.
І якщо після всього цього ваше профілювання та тестування виявляє, що lexical_casts є неприпустимим вузьким місцем, саме тоді вам слід подумати про макро-жах.