के सी ++ 11 मानक से निम्नलिखित उद्धरण (the N3376 draft, सटीक होना करने के लिए) पर विचार करें:उपयोगकर्ता परिभाषित स्ट्रिंग साहित्य बनाम। अन्य उपयोगकर्ता निर्धारित Literals
(2.14.8.5)
तो एल एक उपयोगकर्ता के डी फाई ned- है स्ट्रिंग-शाब्दिक, इसके ud-su ffi x के बिना शाब्दिक होना चाहिए और अंत में कोड इकाइयों की संख्या (यानी, लंबाई को समाप्त करने वाले शून्य वर्ण को छोड़कर) दें। शाब्दिक एल प्रपत्र की एक कॉल के रूप में व्यवहार किया जाता है
operator "" X (str , len)
जबकि उपयोगकर्ता परिभाषित शाब्दिक (फ्लोटिंग प्वाइंट, पूर्णांक, चरित्र) के सभी अन्य प्रकार के लिए लंबाई के साथ पारित कर दिया कभी नहीं है, भले ही शाब्दिक खुद को एक स्ट्रिंग के रूप में पारित किया जाता है। उदाहरण के लिए:
42_zzz; // calls operator "" _zzz("42") and not operator "" _zzz("42", 2)
स्ट्रिंग और गैर-स्ट्रिंग उपयोगकर्ता परिभाषित अक्षरों के बीच यह अंतर क्यों है? या मुझे कहना चाहिए, कार्यान्वयन यूडी स्ट्रिंग अक्षर के लिए लेन कैसे पास करता है? लम्बाई, जैसा कि अन्य शाब्दिकों के मामले में, शून्य-समाप्ति द्वारा घटाया जा सकता है। मैं क्या खो रहा हूँ?
शायद एन्कोडिंग/चरित्र सेट के साथ कुछ करने के लिए। अन्य पैराग्राफ से पहले सभी में "[नोट: अनुक्रम सी 1 सी 2 ... सीके में केवल मूल स्रोत चरित्र सेट से वर्ण हो सकते हैं। - अंत नोट]"। – Mat
@Mat: लेकिन अन्य एन्कोडिंग या चरित्र सेट के साथ तार अभी भी निरस्त नहीं हैं, है ना? –
शून्य-समाप्ति पर्याप्त नहीं है। मुझे लगता है कि "मूल स्रोत चरित्र सेट" में '\ 0' शामिल नहीं है। – Mat