C ++ có các chuỗi thích hợp nên bạn cũng có thể sử dụng chúng. Chúng nằm trong chuỗi tiêu đề chuẩn. #include <string> để sử dụng chúng. Không còn vượt quá bộ đệm strcat / strcpy; không còn thiếu các dấu chấm hết rỗng; không còn quản lý bộ nhớ thủ công lộn xộn; chuỗi được đếm thích hợp với ngữ nghĩa giá trị thích hợp.
C ++ cũng có khả năng chuyển đổi các bools thành các biểu diễn mà con người có thể đọc được. Chúng tôi đã thấy các gợi ý về nó trước đó với các ví dụ iostream, nhưng chúng hơi hạn chế vì chúng chỉ có thể truyền văn bản vào bảng điều khiển (hoặc với fstreams, một tệp). May mắn thay, những người thiết kế C ++ không hoàn toàn là những kẻ ngốc; chúng tôi cũng có iostream không được hỗ trợ bởi bảng điều khiển hoặc một tệp, mà bởi một bộ đệm chuỗi được quản lý tự động. Chúng được gọi là dòng chuỗi. #include <sstream> để nhận chúng. Sau đó, chúng ta có thể nói:
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();
}
Tất nhiên, chúng tôi không thực sự muốn nhập tất cả những thứ đó. May mắn thay, C ++ cũng có một thư viện bên thứ ba tiện lợi có tên Boost có thể giúp chúng ta ở đây. Boost có một chức năng hay được gọi là lexical_cast. Do đó, chúng ta có thể sử dụng nó:
boost::lexical_cast<std::string>(my_bool)
Bây giờ, đúng khi nói rằng đây là chi phí cao hơn một số macro; stringstreams xử lý các ngôn ngữ mà bạn có thể không quan tâm và tạo một chuỗi động (với cấp phát bộ nhớ) trong khi macro có thể mang lại một chuỗi theo nghĩa đen, điều này tránh được điều đó. Nhưng mặt khác, phương pháp dòng chuỗi có thể được sử dụng cho rất nhiều chuyển đổi giữa các biểu diễn có thể in và nội bộ. Bạn có thể chạy ngược lại; boost :: lexical_cast <bool> ("true") làm điều đúng, chẳng hạn. Bạn có thể sử dụng chúng với các số và thực tế là bất kỳ loại nào với các toán tử I / O được định dạng phù hợp. Vì vậy, chúng khá linh hoạt và hữu ích.
Và nếu sau tất cả những điều này, việc lập hồ sơ và điểm chuẩn của bạn tiết lộ rằng lexical_casts là một nút cổ chai không thể chấp nhận được, đó là lúc bạn nên cân nhắc thực hiện một số điều kinh dị vĩ mô.