C ++ में उचित तार हैं ताकि आप उनका उपयोग कर सकें। वे मानक हेडर स्ट्रिंग में हैं। #include <string> उनका उपयोग करने के लिए। कोई और अधिक strcat / strcpy बफ़र ओवररन; कोई और अधिक लापता शून्य टर्मिनेटर; कोई और अधिक गन्दा मैनुअल मेमोरी प्रबंधन; उचित मूल्य शब्दार्थ के साथ उचित गिने हुए तार।
C ++ में बूल को मानव-पठनीय अभ्यावेदन में भी परिवर्तित करने की क्षमता है। हमने इससे पहले आईस्ट्रीम उदाहरणों के साथ संकेत देखे थे, लेकिन वे थोड़े सीमित हैं क्योंकि वे केवल पाठ को कंसोल (या फ़ॉस्ट्रीम, एक फ़ाइल) के साथ ब्लास्ट कर सकते हैं। सौभाग्य से, C ++ के डिजाइनर पूर्ण बेवकूफ नहीं थे; हमारे पास iostreams भी हैं जो कंसोल या फ़ाइल द्वारा समर्थित नहीं हैं, लेकिन स्वचालित रूप से प्रबंधित स्ट्रिंग बफ़र द्वारा। वे कड़े कहलाते हैं। उन्हें पाने के लिए # streamसंकट को कम करें। तब हम कह सकते हैं:
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 नाम का एक सुविधाजनक तृतीय-पक्ष पुस्तकालय भी है जो हमें यहाँ मदद कर सकता है। बूस्ट में lexical_cast नामक एक अच्छा कार्य है। हम इसका उपयोग इस प्रकार कर सकते हैं:
boost::lexical_cast<std::string>(my_bool)
अब, यह कहना सही है कि यह कुछ मैक्रो की तुलना में अधिक ओवरहेड है; स्ट्रिंगस्ट्रीम उन स्थानों से निपटते हैं जिनकी आप परवाह नहीं कर सकते हैं, और एक गतिशील स्ट्रिंग (मेमोरी आवंटन के साथ) बना सकते हैं जबकि मैक्रो शाब्दिक स्ट्रिंग प्राप्त कर सकता है, जो इससे बचता है। लेकिन दूसरी तरफ, प्रिंट करने योग्य पद्धति का उपयोग प्रिंट करने योग्य और आंतरिक अभ्यावेदन के बीच कई रूपांतरणों के लिए किया जा सकता है। आप उन्हें पीछे की ओर चला सकते हैं; बढ़ावा देना :: lexical_cast <bool> ("सच") सही काम करता है, उदाहरण के लिए। आप उन्हें संख्याओं के साथ और वास्तव में किसी भी प्रकार के सही स्वरूपित I / O ऑपरेटरों के साथ उपयोग कर सकते हैं। इसलिए वे काफी बहुमुखी और उपयोगी हैं।
और अगर यह सब अपने रूपरेखा और बेंचमार्किंग के बाद पता चलता है कि lexical_casts एक अस्वीकार्य टोंटी कर रहे हैं, कि जब आप कुछ मैक्रो हॉरर कर विचार करना चाहिए।