C ++ memiliki string yang tepat sehingga Anda sebaiknya menggunakannya. Mereka ada di string header standar. #include <string> untuk menggunakannya. Tidak ada lagi strcat / strcpy buffer overruns; tidak ada lagi terminator nol yang hilang; tidak ada lagi manajemen memori manual yang berantakan; string yang dihitung dengan benar dengan semantik nilai yang tepat.
C ++ memiliki kemampuan untuk mengubah bools menjadi representasi yang dapat dibaca manusia juga. Kami melihat petunjuk sebelumnya dengan contoh iostream, tetapi mereka agak terbatas karena mereka hanya dapat meledakkan teks ke konsol (atau dengan fstreams, file). Untungnya, para perancang C ++ tidak sepenuhnya idiot; kami juga memiliki iostreams yang tidak didukung oleh konsol atau file, tetapi oleh buffer string yang dikelola secara otomatis. Mereka disebut aliran string. #include <sstream> untuk mendapatkannya. Kemudian kita bisa mengatakan:
std::string bool_as_text(bool b)
{
std::stringstream converter;
converter << std::boolalpha << b;
return converter.str();
}
Tentu saja, kami tidak ingin mengetik semua itu. Untungnya, C ++ juga memiliki pustaka pihak ketiga yang nyaman bernama Boost yang dapat membantu kami di sini. Boost memiliki fungsi bagus yang disebut lexical_cast. Kita bisa menggunakannya sebagai berikut:
boost::lexical_cast<std::string>(my_bool)
Sekarang, benar untuk mengatakan bahwa ini adalah overhead yang lebih tinggi daripada beberapa makro; stringstream menangani lokal yang mungkin tidak Anda pedulikan, dan membuat string dinamis (dengan alokasi memori) sedangkan makro dapat menghasilkan string literal, yang menghindarinya. Tapi di sisi lain, metode stringstream dapat digunakan untuk banyak konversi antara representasi yang dapat dicetak dan internal. Anda bisa menjalankannya mundur; boost :: lexical_cast <bool> ("true") melakukan hal yang benar, misalnya. Anda dapat menggunakannya dengan angka dan bahkan tipe apa pun dengan operator I / O yang diformat dengan benar. Jadi mereka cukup serbaguna dan berguna.
Dan jika setelah semua ini profiling dan benchmarking mengungkapkan bahwa lexical_casts adalah bottleneck tidak dapat diterima, itulah saat Anda harus mempertimbangkan melakukan beberapa horor makro.