अगर मेरे पास:
struct whatever {
int data;
};
volatile whatever test;
होगा test.dataभी अस्थिर हो?
अगर मेरे पास:
struct whatever {
int data;
};
volatile whatever test;
होगा test.dataभी अस्थिर हो?
जवाबों:
एक और प्रश्न पूछा जा सकता है (या मूल प्रश्न को देखने का एक और तरीका):
constबनाने से इसके सभी सदस्य बन जाते हैं const?अगर मेरे पास:
struct whatever { int data; };
const whatever test;
Test.data constभी होगा?
मेरा उत्तर है: हाँ। यदि आप किसी प्रकार की वस्तु घोषित whateverकरते हैं constतो उसके सभी सदस्य constभी होंगे
इसी प्रकार, यदि आप प्रकार का ऑब्जेक्ट की घोषणा whateverके साथ volatileतो अपने सभी सदस्य होंगे volatileभी, अगर आप के साथ वस्तु की घोषणा की तरह constहै, यह के सभी सदस्य हो जाएगा constभी।
constऔर volatileएक ही सिक्के के दो चेहरे हैं; वे ऐसा कर रहे हैं कि मानक अक्सर उन्हें संदर्भित करता है cv-qualifiers।
मानक से उद्धरण ($ 7.1.5.1 / 8)
[नोट: अस्थिरता ऑब्जेक्ट को शामिल करने वाले आक्रामक अनुकूलन से बचने के लिए कार्यान्वयन के लिए एक संकेत है क्योंकि ऑब्जेक्ट के मूल्य को एक कार्यान्वयन द्वारा अवांछनीय द्वारा बदला जा सकता है। विस्तृत शब्दार्थ के लिए 1.9 देखें। सामान्य तौर पर, वाष्पशील के शब्दार्थ C + + में समान होते हैं क्योंकि वे C में होते हैं]
इसका मतलब है, यदि आपकी वस्तु किसी संरचना का उदाहरण है, तो संकलक आक्रामक अनुकूलन को वस्तु से नहीं जोड़ सकता , जब तक कि वह इसके प्रत्येक सदस्य के आक्रामक अनुकूलन से बच नहीं जाता है। (अन्यथा, यह ऑब्जेक्ट को शामिल करने वाले अनुकूलन से कैसे बच सकता है?)
संबंधित विषय:
प्रेषक: http://msdn.microsoft.com/en-us/library/145yc477%28v=vs.80%29.aspx
पॉइंटर द्वारा बताई गई वस्तु को कास्ट या वाष्पशील घोषित करने के लिए, फॉर्म की घोषणा का उपयोग करें:
const char *cpch;
volatile char *vpch;
पॉइंटर के मूल्य को घोषित करने के लिए - अर्थात, पॉइंटर में संग्रहीत वास्तविक पता - कॉन्स्टेबल या अस्थिर के रूप में, फॉर्म की घोषणा का उपयोग करें:
char * const pchc;
char * volatile pchv;
volatileसदस्य फ़ंक्शन केवलthisपॉइंटर को अस्थिर बनाता है , इसलिए सदस्यों को हर बार मेमोरी से पढ़ा जाएगा कि वे एक्सेस कर रहे हैं लेकिन "आधिकारिक तौर पर" अस्थिर नहीं हैं।