C++ में गुप्त ऑपरेटर -->: एक मजाक जो किंवदंती बन गया

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ में रहस्यमय ऑपरेटर "-->" के पीछे क्या छिपा है?

\n\n

कल्पना करें: आप Stack Overflow पर जाते हैं और एक ऐसा प्रश्न देखते हैं जिसने हजारों वोट और लाखों व्यूज जुटाए हैं। प्रश्न सरल लेकिन दिलचस्प है: "What is the '-->' operator in C/C++?". यह किसी गुप्त चीज़ जैसा लगता है, है ना? हो सकता है कि यह C++23 का नया मानक हो? या कोई जादुई संरचना जिसके बारे में पाठ्यपुस्तकों में चुप्पी साधी गई हो?

\n\n

वास्तव में, यह सबसे प्रसिद्ध प्रोग्रामर मीम्स में से एक है और साथ ही — यह समझने का एक शानदार अवसर है कि C++ में ऑपरेटर कैसे काम करते हैं और कोड पढ़ते समय अपने दिमाग को कैसे आसानी से धोखा दिया जा सकता है। इस लेख में हम "ऑपरेटर -->" के रहस्य को उजागर करेंगे और दिखाएंगे कि कैसे यह उदाहरण शुरुआती लोगों को गहरे स्तर पर C++ सिंटैक्स समझने में मदद करता है।

\n\n

रहस्यमय कोड कैसा दिखता है?

\n\n

यह रहा वह टुकड़ा जिसने इंटरनेट पर तहलका मचा दिया:

\n\n
#include <iostream>\n\nint main() {\n    int x = 10;\n    while (x --> 0) {\n        std::cout << x << " ";\n    }\n    return 0;\n}\n
\n\n

प्रोग्राम का परिणाम:

\n\n
9 8 7 6 5 4 3 2 1 0
\n\n

ऐसा लगता है जैसे हम ऑपरेटर --> (डिक्रीमेंट और एरो) का उपयोग कर रहे हैं। लेकिन आइए सच्चाई का सामना करें: C++ में कोई "-->" ऑपरेटर मौजूद नहीं है। यह एक भ्रम है जो इस बात से पैदा हुआ है कि C++ कंपाइलर कोड को टोकन में कैसे तोड़ता है।

\n\n

कंपाइलर इस कोड को कैसे "पढ़ता" है?

\n\n

C++ कंपाइलर अधिकतम मंच नियम (maximum munch rule) का पालन करता है: यह हमेशा उपलब्ध वर्णों से सबसे लंबा संभव टोकन बनाने की कोशिश करता है। अभिव्यक्ति x --> 0 में, कंपाइलर --> नहीं, बल्कि दो अलग-अलग टोकन देखता है:

\n\n
    \n
  • टोकन 1: -- — डिक्रीमेंट ऑपरेटर (1 से घटाना)
  • \n
  • टोकन 2: > — तुलना ऑपरेटर "से बड़ा"
  • \n
\n\n

यानी, वास्तव में यह x --> 0 नहीं, बल्कि x-- > 0 है। -- और > के बीच स्पेस आवश्यक नहीं है — कंपाइलर वैसे भी समझ जाएगा कि ये दो अलग-अलग ऑपरेटर हैं।

\n\n

पूर्ण विश्लेषण: शुरू से अंत तक

\n\n

आइए प्रोग्राम के तर्क को समझने के लिए इस कोड को चरण दर चरण तोड़ें:

\n\n
    \n
  1. वेरिएबल x को मान 10 से आरंभ किया जाता है।
  2. \n
  3. लूप की स्थिति की जाँच की जाती है: x-- > 0। यह पोस्टफिक्स डिक्रीमेंट है: पहले x का वर्तमान मान (10) लिया जाता है, 0 से तुलना की जाती है (10 > 0 — सत्य), और उसके बाद ही x को घटाकर 9 किया जाता है।
  4. \n
  5. चूंकि स्थिति सत्य है, लूप का बॉडी निष्पादित होता है: पहले से घटा हुआ मान (9) प्रदर्शित होता है।
  6. \n
  7. लूप तब तक दोहराया जाता है जब तक x 0 नहीं हो जाता। जब x = 0, स्थिति 0 > 0 असत्य होती है, लूप समाप्त हो जाता है।
  8. \n
\n\n

ध्यान दें: आउटपुट में हम 9 से 0 तक की संख्याएँ देखते हैं, लेकिन 10 नहीं देखते हैं। ऐसा इसलिए है क्योंकि पोस्टफिक्स डिक्रीमेंट पहले तुलना के लिए पुराने मान का उपयोग करता है, फिर घटाता है। शुरुआती लोगों के लिए यह एक सामान्य जाल है, लेकिन अब आप जानते हैं कि यह कैसे काम करता है।

\n\n

यह उदाहरण इतना लोकप्रिय क्यों है?

\n\n

Stack Overflow पर इस प्रश्न ने 1.5 मिलियन से अधिक व्यूज प्राप्त किए हैं। क्यों? क्योंकि यह C++ प्रोग्रामिंग की कई महत्वपूर्ण अवधारणाओं को पूरी तरह से प्रदर्शित करता है:

\n\n
    \n
  • लेक्सिकल विश्लेषण — कंपाइलर कोड को टोकन में कैसे तोड़ता है;
  • \n
  • पोस्टफिक्स बनाम प्रीफिक्स डिक्रीमेंट — x-- और --x के बीच अंतर;
  • \n
  • ऑपरेटर प्राथमिकता — कोड इस तरह से क्यों काम करता है, दूसरे तरीके से नहीं;
  • \n
  • कोड पठनीयता — क्यों "काम करने वाला" कोड भी भ्रामक हो सकता है।
  • \n
\n\n

वास्तविक कोड में इस जाल में कैसे न फँसें?

\n\n

इस कहानी से मुख्य सबक — कोड इस तरह लिखें कि उसे पढ़ना आसान हो। कभी भी भरोसा न करें

ब्लॉग

पुस्तक अनुशंसाएँ