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

क्या C++ में कॉन्स्टेक्सपीआर फ़ंक्शन का उपयोग करके एक स्टेटिक कॉन्स्टेक्सपीआर सदस्य को आरंभ किया जा सकता है?

2024-12-22 को प्रकाशित
ब्राउज़ करें:954

Can a Static Constexpr Member Be Initialized Using a Constexpr Function in C  ?

Constexpr स्टेटिक फ़ंक्शन का उपयोग करके स्टेटिक सदस्य को प्रारंभ करना

मूल प्रश्न:

सी में, क्या कॉन्स्टेक्सपीआर फ़ंक्शन से कॉन्स्टेक्सपीआर मान (संकलन-समय स्थिरांक) की गणना करना और इसे ए के स्थिर सदस्य के रूप में संग्रहीत करना संभव है? क्लास?

पहला प्रयास और कंपाइलर्स की प्रतिक्रिया:

कक्षा के भीतर एक स्थिर कॉन्स्टेक्सपीआर फ़ंक्शन foo को परिभाषित करने और foo का उपयोग करके एक स्थिर कॉन्स्टेक्सपीआर सदस्य बार को प्रारंभ करने का पहला प्रयास विफल रहा जी -4.5.3 और जी दोनों में त्रुटियों के साथ -4.6.3.

स्पष्टीकरण:

सी मानक के अनुसार, एक स्थिर कॉन्स्टैक्स डेटा सदस्य को ब्रेस-या-बराबर का उपयोग करके वर्ग परिभाषा में प्रारंभ किया जा सकता है -इनिशियलाइज़र, जहां प्रत्येक इनिशियलाइज़र क्लॉज एक स्थिर अभिव्यक्ति होना चाहिए। प्रदान किए गए कोड ने इस नियम का उल्लंघन किया है, क्योंकि बार का आरंभीकरण क्लास बॉडी के भीतर कॉन्स्ट एक्सप्रेशन foo(sizeof(int)) पर निर्भर करता है, जिससे यह एक स्थिर अभिव्यक्ति नहीं बन जाता है।

आगे का विश्लेषण:

क्लास बॉडी के बाहर कॉन्स्टेक्सपीआर फ़ंक्शन परिभाषा को स्थानांतरित करने सहित आगे के प्रयासों के परिणामस्वरूप, जी -4.6.3 में त्रुटियां हुईं, जो कंपाइलर-विशिष्ट को उजागर करती हैं सीमाएँ।

निष्कर्ष:

सी मानक के अनुसार, एक स्थिर कॉन्स्टेक्सपीआर डेटा सदस्य को कॉन्स्टेक्सपीआर फ़ंक्शन कॉल वाले इनिशियलाइज़र के साथ आरंभ करने की अनुमति ए की परिभाषा के बाहर नहीं है कॉन्स्टेक्सपीआर फ़ंक्शन या कॉन्स्टेक्सपीआर कंस्ट्रक्टर। यह इस आवश्यकता के कारण है कि कॉन्स्टेक्सपीआर चर सदस्य फ़ंक्शन निकायों के भीतर संकलन-समय स्थिरांक के रूप में उपलब्ध होना चाहिए।

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

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

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

Copyright© 2022 湘ICP备2022001581号-3