C++
परिवर्तनीय घोषणा कीवर्ड
खोज…
स्थिरांक
एक प्रकार का विनिर्देशक; जब एक प्रकार पर लागू किया जाता है, तो प्रकार का कॉन्स्ट-योग्य संस्करण तैयार करता है। देखें स्थिरांक कीवर्ड के अर्थ पर जानकारी के लिए 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
इसके ऑपरेंड के प्रकार का उत्पादन करता है, जिसका मूल्यांकन नहीं किया जाता है।
यदि ऑपरेंड
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टाइपTdecltype(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- यदि
विशेष प्रपत्र 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];
}
}