खोज…


वाक्य - विन्यास

  • static_assert ( bool_constexpr , message )
  • static_assert ( bool_constexpr ) / * चूंकि C ++ 17 * /

पैरामीटर

पैरामीटर विवरण
bool_constexpr जाँच करने की अभिव्यक्ति
संदेश जब bool_constexpr गलत हो तो प्रिंट करने के लिए संदेश

टिप्पणियों

रनटाइम अश्योरेंस के विपरीत, स्थिर समय के आधार पर स्थैतिक अभिक्रियाओं की जाँच की जाती है और इसे अनुकूलित बिल्ड्स को संकलित करते समय लागू भी किया जाता है।

static_assert

सिद्धांतों का मतलब है कि एक स्थिति की जाँच की जानी चाहिए और यदि यह गलत है, तो यह एक त्रुटि है। static_assert() , यह कंपाइल-टाइम किया जाता है।

template<typename T>
T mul10(const T t)
{
    static_assert( std::is_integral<T>::value, "mul10() only works for integral types" );
    return (t << 3) + (t << 1);
}

एक static_assert() में एक अनिवार्य पहला पैरामीटर है, शर्त, वह एक बूल कॉन्स्टैक्स है। इसका दूसरा पैरामीटर हो सकता है, संदेश, यह एक स्ट्रिंग शाब्दिक है। सी ++ 17 से, दूसरा पैरामीटर वैकल्पिक है; इससे पहले, यह अनिवार्य है।

सी ++ 17
template<typename T>
T mul10(const T t)
{
    static_assert(std::is_integral<T>::value);
    return (t << 3) + (t << 1);
}

इसका उपयोग तब किया जाता है जब:

  • सामान्य तौर पर, कॉम्पेक्स मूल्य पर कुछ प्रकार के संकलन-समय पर सत्यापन की आवश्यकता होती है
  • एक टेम्प्लेट फ़ंक्शन को इसके पास दिए गए प्रकार के कुछ गुणों को सत्यापित करने की आवश्यकता है
  • एक के लिए परीक्षण के मामले लिखना चाहता है:
    • टेम्पलेट रूपांकनों
    • बाधा कार्य
    • मैक्रो मेटाप्रोग्रामिंग
  • कुछ परिभाषित आवश्यक हैं (उदा।, C ++ संस्करण)
  • पोर्टिंग विरासत कोड, साइज़ोफ़ sizeof(T) पर अभिकथन (जैसे, 32-बिट इंट)
  • कार्य करने के लिए कार्यक्रम के लिए कुछ संकलक सुविधाओं की आवश्यकता होती है (पैकिंग, खाली आधार वर्ग अनुकूलन, आदि)।

ध्यान दें कि static_assert() SFINAE में भाग नहीं लेता है: इस प्रकार, जब अतिरिक्त अधिभार / विशेषज्ञता संभव है, तो किसी को इसका उपयोग टेम्पलेट std::enable_if<> तकनीकों (जैसे std::enable_if<> ) के बजाय नहीं करना चाहिए। इसका उपयोग टेम्पलेट कोड में किया जा सकता है जब अपेक्षित अधिभार / विशेषज्ञता पहले से ही मिल जाती है, लेकिन आगे सत्यापन की आवश्यकता होती है। ऐसे मामलों में, यह इसके लिए SFINAE पर निर्भर रहने से अधिक ठोस त्रुटि संदेश प्रदान कर सकता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow