अंतिम अद्यतन:2026-10-12
C++ Insights कंपाइल-टाइम अवलोकन¶
पाठक अक्सर पूछते हैं: range-for आख़िर किसमें compile होता है? lambda capture सचमुच सिर्फ member variables हैं? auto deduction के नियम याद नहीं रहते तो क्या करें? ऐसे सवालों के जवाब असल में कंपाइलर की नज़र में लिखे हैं, लेकिन हम आम तौर पर उन्हें देख नहीं पाते। आज एक ऐसा टूल पेश करता हूँ जो यह "कंपाइलर की नज़र वाला" कोड सीधा अनुवाद करके दे देता है: C++ Insights।
1. यह क्या है¶
C++ Insights, Andreas Fertig द्वारा विकसित एक ओपन-सोर्स टूल है (GitHub); मूल रूप से यह एक रूपांतरित Clang है: आपके C++ सोर्स कोड का semantic analysis करने के बाद उसे समतुल्य लेकिन पूरी तरह explicit C++ में "डीकंपाइल" कर देता है। यह optimize नहीं करता, assembly भी नहीं बनाता — केवल "कंपाइलर ने मेरे लिए क्या लिखा" यही जवाब देने के लिए है।
2. क्या देख सकते हैं¶
सबसे ज़्यादा पूछे जाने वाले कुछ परिदृश्य लेते हैं; सलाह है कि साइट खोलकर नीचे का कोड पेस्ट करके तुलना करें।
(1) range-for का असली चेहरा:
Insights बताएगा कि यह वास्तव में यह है:
{
auto&& __range = v;
for (auto __begin = __range.begin(), __end = __range.end();
__begin != __end; ++__begin) {
auto x = *__begin;
std::cout << x;
}
}
यही यह भी समझाता है कि __range के dangle होने के बाद loop का व्यवहार undefined क्यों हो जाता है।
(2) lambda अनाम class का operator() ही है:
एक्सपैंशन के बाद कंपाइलर-जनित closure type और captured members दिखते हैं; mutable, reference capture और value capture का अंतर एक नज़र में साफ।
(3) auto/decltype, structured bindings, template instantiation के बाद के असली types — सब explicit हो जाते हैं।
3. कैसे इस्तेमाल करें¶
ऑनलाइन संस्करण: cppinsights.io, बाईं ओर कोड पेस्ट करें और दाईं ओर परिणाम पाएँ, C++ standard (11/14/17/20/23) चुनने का समर्थन है।
कमांड-लाइन संस्करण स्थानीय रूप से इंस्टॉल किया जा सकता है:
git clone https://github.com/andreasfertig/cppinsights
cd cppinsights && mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j8
compile होकर बना insights बाइनरी सीधे फ़ाइलों पर चलता है: insights hello.cpp -- -std=c++20।
4. सारांश¶
लेख लिखते समय, प्रेजेंटेशन तैयार करते समय या interview की तैयारी में, Insights "कंपाइलर ने आख़िर क्या किया" जाँचने का सबसे तेज़ रास्ता है — नियम रटने से कहीं बेहतर। प्रश्न हों तो कमेंट सेक्शन में आपका स्वागत है~
संबंधित विषय¶
- Bazel से C++ प्रोजेक्ट बिल्ड करना | C++那些事
- Bazel और LLDB संयुक्त डिबगिंग | C++那些事
- CMake की शुरुआत और व्यवहार | C++那些事
- Conan C++ पैकेज मैनेजर की शुरुआत | C++那些事
- C++ Jupyter Notebook इंटरैक्शन | C++那些事
- C++ string को int में बदलना | C++那些事
- C++ dbg-macro डीबगिंग मैक्रो | C++那些事
- GCC कंपाइलेशन विकल्पों की विस्तृत जानकारी | C++那些事
- GDB से C++ प्रोग्राम डीबग करना | C++那些事
- GDB Python एक्सटेंशन डीबगिंग | C++那些事