खोज…


स्थिरांक

एक प्रकार का विनिर्देशक; जब एक प्रकार पर लागू किया जाता है, तो प्रकार का कॉन्स्ट-योग्य संस्करण तैयार करता है। देखें स्थिरांक कीवर्ड के अर्थ पर जानकारी के लिए const

const int x = 123;
x = 456;    // error
int& r = x; // error

struct S {
    void f();
    void g() const;
};
const S s;
s.f(); // error
s.g(); // OK

decltype

सी ++ 11

इसके ऑपरेंड के प्रकार का उत्पादन करता है, जिसका मूल्यांकन नहीं किया जाता है।

  • यदि ऑपरेंड e बिना किसी अतिरिक्त कोष्ठक के एक नाम है, तो decltype(e) घोषित प्रकार का e

    int x = 42;
    std::vector<decltype(x)> v(100, x); // v is a vector<int>
    
  • यदि ऑपरेंड e किसी भी अतिरिक्त कोष्ठक के बिना एक वर्ग का सदस्य अभिगम है, तो decltype(e) सदस्य की पहुंच का घोषित प्रकार है।

    struct S {
        int x = 42;
    };
    const S s;
    decltype(s.x) y; // y has type int, even though s.x is const
    
  • अन्य सभी मामलों में, decltype(e) की पैदावार दोनों प्रकार और मूल्य वर्ग अभिव्यक्ति की e , के रूप में इस प्रकार है:

    • यदि e टाइप T का एक प्रकार है, तो decltype(e) T&
    • यदि e टाइप T का एक xvalue है, तो decltype(e) T&&
    • यदि e टाइप T decltype(e) , तो decltype(e) T

    इसमें बहिर्विरोधी कोष्ठक के साथ मामला शामिल है।

    int f() { return 42; }
    int& g() { static int x = 42; return x; }
    int x = 42;
    decltype(f()) a = f(); // a has type int
    decltype(g()) b = g(); // b has type int&
    decltype((x)) c = x;   // c has type int&, since x is an lvalue
    
सी ++ 14

विशेष प्रपत्र decltype(auto) अपने इनिशियलाइज़र से एक वैरिएबल के प्रकार को या auto decltype के टाइप डिडक्शन नियमों का उपयोग करते हुए, इसकी परिभाषा में return स्टेटमेंट्स से किसी फंक्शन के return प्रकार को decltype

const int x = 123;
auto y = x;           // y has type int
decltype(auto) z = x; // z has type const int, the declared type of x

पर हस्ताक्षर किए

एक कीवर्ड जो कुछ पूर्णांक प्रकार के नामों का हिस्सा है।

  • जब अकेले उपयोग किया जाता है, तो int निहित होता है, ताकि signed , signed int , और int एक ही प्रकार के हों।
  • जब char के साथ संयुक्त किया जाता है, तो signed char प्रकार की पैदावार होती है, जो char से अलग प्रकार की होती है, भले ही char पर हस्ताक्षर किए गए हों। signed char में एक सीमा होती है जिसमें कम से कम -127 से +127, समावेशी शामिल होते हैं।
  • जब short , long , या long long के साथ संयुक्त किया जाता है, तो यह बेमानी है, क्योंकि उन प्रकार के पहले से ही हस्ताक्षरित हैं।
  • signed को bool , wchar_t , char16_t , या char32_t के साथ नहीं जोड़ा जा सकता है।

उदाहरण:

signed char celsius_temperature;
std::cin >> celsius_temperature;
if (celsius_temperature < -35) {
    std::cout << "cold day, eh?\n";
}

अहस्ताक्षरित

एक प्रकार विनिर्देशक जो पूर्णांक प्रकार के अहस्ताक्षरित संस्करण का अनुरोध करता है।

  • जब अकेले इस्तेमाल किया, int निहित है, इसलिए unsigned के रूप में एक ही प्रकार है unsigned int
  • प्रकार unsigned char प्रकार से अलग है char भले ही, char अहस्ताक्षरित है। यह कम से कम 255 तक पूर्णांक पकड़ सकता है।
  • unsigned को short , long , या long long के साथ जोड़ा जा सकता है। इसे bool , wchar_t , char16_t , या char32_t के साथ नहीं जोड़ा जा सकता है।

उदाहरण:

char invert_case_table[256] = { ..., 'a', 'b', 'c', ..., 'A', 'B', 'C', ... };
char invert_case(char c) {
    unsigned char index = c;
    return invert_case_table[index];
    // note: returning invert_case_table[c] directly does the
    // wrong thing on implementations where char is a signed type
}

परिवर्तनशील

एक प्रकार का पात्र; जब एक प्रकार पर लागू किया जाता है, तो प्रकार का अस्थिर-योग्य संस्करण तैयार करता है। अस्थिर योग्यता उसी प्रकार की भूमिका निभाती है, जो टाइप सिस्टम में const योग्यता के रूप में होती है, लेकिन volatile वस्तुओं को संशोधित होने से नहीं रोकती है; इसके बजाय, यह संकलक को ऐसी वस्तुओं तक सभी पहुँच के साइड इफेक्ट के रूप में व्यवहार करने के लिए मजबूर करता है।

नीचे दिए गए उदाहरण में, यदि memory_mapped_port अस्थिर नहीं थे, तो कंपाइलर फ़ंक्शन को ऑप्टिमाइज़ कर सकता है, ताकि यह केवल अंतिम लेखन करे, जो कि गलत होगा यदि sizeof(int) 1 से अधिक है। volatile योग्यता इसे अपने sizeof(int) का इलाज करने के लिए मजबूर करती है sizeof(int) विभिन्न दुष्प्रभावों के रूप में लिखते हैं और इसलिए उनमें से सभी (क्रम में) करते हैं।

extern volatile char memory_mapped_port;
void write_to_device(int x) {
    const char* p = reinterpret_cast<const char*>(&x);
    for (int i = 0; i < sizeof(int); i++) {
        memory_mapped_port = p[i];
    }
}


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