2013-03-13 11 views
7

मुझे 100 वर्णों की एक स्ट्रिंग बनाने की आवश्यकता है।सी ++ 11 स्ट्रिंग प्रारंभिक

क्यों निम्नलिखित

std::string myString = {100, 'A'}; 

std::string myString(100, 'A'); 

से अलग परिणाम देता है?

+1

सार्वभौमिक आरंभीकरण के लिए के साथ एक स्ट्रिंग बनाता है, बस '{}' के साथ '()' को प्रतिस्थापित करें। आपको 'std :: string myString {100, 'ए'};' –

+1

@CrazyEddie करना चाहिए, लेकिन यह एक उदाहरण है जहां ब्रैकेट में वह परिवर्तन मूल रूप से प्रोग्राम के व्यवहार को बदल देगा। 'प्रारंभकर्ता_सूची' कन्स्ट्रक्टर को अन्य सभी पर प्राथमिकता दी जाती है। '=' चिह्न यहां कोई फर्क नहीं पड़ता है। [डेमो देखें] (http://ideone.com/VxAQUY)। – juanchopanza

+1

@CrazyEddie इससे कोई फर्क पड़ता है? नतीजा अभी भी 'std :: string myString (100, 'ए') जैसा नहीं है;' – Praetorian

उत्तर

14
std::string myString = {100, 'A'}; 

आरंभकर्ता सूची का उपयोग शुरू करना प्रारंभ है। यह 2 पात्रों के साथ एक स्ट्रिंग बनाता है: कोड 100 के साथ एक और 'ए'

std::string myString(100, 'A'); 

निम्नलिखित निर्माता कहता है:

string (size_t n, char c); 

जो 100 'ए के

+5

औपचारिक रूप से, पहला तर्क मूल्य 100 के साथ केवल 'char' है; यह ASCII है यदि आपका सिस्टम 'char' मानों को ASCII के रूप में मानता है। हालांकि यह काफी आम है, सी ++ भाषा परिभाषा की आवश्यकता नहीं है, और ऐसे सिस्टम हैं जहां यह सत्य नहीं है। –

+0

@Fanael - मुझे नहीं पता कि यह कितना मुश्किल था, लेकिन यह एक महत्वपूर्ण बात है जिसे अक्सर अनदेखा किया जाता है, और केवल पाठ को संपादित करने से लोगों को याद दिलाया नहीं जाता है। –

+0

@PeteBecker: क्या इसका मतलब है कि 'std :: string s = {100,' ए '};' अपरिभाषित व्यवहार है? क्या सी ++ 11 में वर्दी प्रारंभकर्ता सिंटैक्स बनाने के अधिकांश इरादे को अमान्य नहीं किया जाएगा? –

1

पहले इसे 100 और A के मानों के लिए शुरू किया गया और दूसरा std::string का कन्स्ट्रक्टर अधिभार कहता है।

+3

हां, वह कन्स्ट्रक्टर आपको 100 'ए' वर्णों के साथ एक स्ट्रिंग देगा। – juanchopanza