"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > मैं C++17 में गैर-टेम्प्लेटेड फ़ंक्शंस में `if constexpr` का उपयोग क्यों नहीं कर सकता?

मैं C++17 में गैर-टेम्प्लेटेड फ़ंक्शंस में `if constexpr` का उपयोग क्यों नहीं कर सकता?

2024-11-26 को प्रकाशित
ब्राउज़ करें:857

Why Can't I Use `if constexpr` in Non-Templated Functions in C  17?

C 17 का "if constexpr" टेम्पलेट फ़ंक्शंस तक सीमित है

C 17 में, "if constexpr" की शुरूआत ने इसके प्रति रुचि जगाई है संकलन-समय स्थिरांक के आधार पर कोड को सशर्त रूप से निष्पादित करने की क्षमता। हालाँकि, गैर-टेम्प्लेटेड फ़ंक्शंस में इसका उपयोग करने का प्रयास करते समय एक समस्या उत्पन्न होती है।

निम्नलिखित कोड पर विचार करें:

#include 
#include 

void print(auto value)
{
  // Compile-time check if value is a pointer
  if constexpr (std::is_pointer_v)
    std::cout 

हालाँकि यह कोड टेम्प्लेट किए गए फ़ंक्शंस में त्रुटियों के बिना संकलित होता है, लेकिन प्रिंट जैसे गैर-टेम्प्लेटेड फ़ंक्शन में रखे जाने पर यह संकलन त्रुटि के साथ विफल हो जाता है। इसका कारण "if constexpr" के व्यवहार में निहित है।

"if constexpr" को टेम्पलेट कोड के सशर्त संकलन की अनुमति देने के लिए डिज़ाइन किया गया है। एक टेम्प्लेट फ़ंक्शन में, कंपाइलर कंपाइल समय पर पैरामीटर के प्रकार का अनुमान लगाता है, जिससे प्रकार के आधार पर उचित कोड पथ का चयन सक्षम हो जाता है। इस मामले में, जब प्रिंट फ़ंक्शन को टेम्प्लेट किया जाता है, तो यह पहचान सकता है कि संकलन समय पर मान एक सूचक है या नहीं और संबंधित कोड शाखा को निष्पादित करता है।

हालांकि, एक गैर-टेम्प्लेटेड फ़ंक्शन में, मान का प्रकार ज्ञात होता है केवल रनटाइम पर, "if constexpr" को अप्रभावी बना देता है। कंपाइलर कंडीशनल की दोनों शाखाओं को निष्पादन योग्य कोड के रूप में मानता है, जिससे जब मान एक पूर्णांक होता है तो पीटीआर में शाखा में मूल्य को डीरेफरेंस करने का प्रयास करते समय संकलन त्रुटि होती है।

इस समस्या से बचने के लिए, " रखना आवश्यक है यदि constexpr" एक टेम्प्लेट फ़ंक्शन के भीतर है या संकलन-समय प्रकार कटौती सुनिश्चित करने के लिए गैर-टेम्प्लेटेड फ़ंक्शन को स्पष्ट प्रकार की जानकारी प्रदान करता है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3