यहाँ हम C++ में उपयोक्ता-परिभाषित लिटरल की अवधारणा देखेंगे। C++ संस्करण 11 से, उपयोगकर्ता परिभाषित साहित्य (UDL) को C++ में जोड़ा जाता है। C++ विभिन्न प्रकार के अंतर्निर्मित प्रकारों के लिए शाब्दिक भी प्रदान करता है लेकिन ये सीमित हैं।
बिल्ट-इन लिटरल -
-
31 (पूर्णांक)
-
3.5 (डबल)
-
4.2F (फ्लोट)
-
'पी' (चरित्र)
-
31ULL (अहस्ताक्षरित लॉन्ग लॉन्ग)
-
0xD0 (अहस्ताक्षरित हेक्साडेसिमल पूर्णांक)
-
"पीक्यू" (स्ट्रिंग)
बिल्ट-इन लिटरल के अलावा, कभी-कभी हमें यूजर डिफाइन्ड लिटरल की जरूरत होती है। इसके पीछे कुछ कारण हैं। आइए कुछ उदाहरणों के साथ देखते हैं -
मान लीजिए कि हम एक भार चर को परिभाषित करना चाहते हैं, लेकिन हम इकाइयों को निर्दिष्ट नहीं कर सकते हैं, जैसे कि यदि हम निम्नानुसार परिभाषित करते हैं -
long double Weight = 3.5;
हमें इकाई के बारे में कोई जानकारी नहीं है, (पाउंड?, किलोग्राम? ग्राम?) लेकिन यूडीएल का उपयोग करके हम इकाइयों को मूल्यों के साथ जोड़ सकते हैं। कुछ लाभ हैं, यह अधिक पठनीय कोड बनाता है और संकलन समय के दौरान रूपांतरण का भी समर्थन करता है
weight = 5.6kg; ratio = 5.6kg/2.1lb;
उपरोक्त अनुपात ज्ञात करने के लिए उन्हें समान इकाइयों में बदलना आवश्यक है। लेकिन यूडीएल हमें यूनिट अनुवाद लागत को दूर करने में मदद करते हैं। इस मामले में, हम उपयोगकर्ता-परिभाषित प्रकार के मामले में उपयोगकर्ता-परिभाषित शाब्दिक और अंतर्निहित प्रकारों के मामले में शाब्दिक के नए रूप को परिभाषित कर सकते हैं। UDL ज्यादा कोडिंग समय बचाने में सक्षम नहीं हो सकता है, लेकिन तेजी से निष्पादन के कारण अधिक से अधिक गणनाओं को संकलन-समय में स्थानांतरित किया जा सकता है।
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include<iostream> #include<iomanip> using namespace std; unsigned long long int operator"" _kb( unsigned long long int x ) { return x*1024; } unsigned long long int operator"" _b( unsigned long long int x ) { return x; } unsigned long long int operator"" _mb( unsigned long long int x ) { return x * 1024 * 1024; } int main() { unsigned long long int size = 24_kb; cout << "Size:" << size << endl; cout << "Few more MB:" << ( size + 2_mb ) << endl; cout << "Size Div:" <<( 10_kb / 2_kb ) << endl; cout << "1KB = " <<( 8_b * 128_b ) << endl; return 0; }
आउटपुट
Size:24576 Few more MB:2121728 Size Div:5 1KB = 1024