2017-08-01 10 views
5

क्या होता है, अस्थिर सदस्य समारोह बुला नहीं अस्थिर वस्तु का उपयोग कर?सी में अस्थिर नहीं वस्तु का उपयोग कर ++ अस्थिर सदस्य समारोह कॉलिंग

#include <iostream> 
using namespace std; 

class A 
{ 
private: 
    int x; 
public: 
    void func(int a) volatile //volatile function 
    { 
     x = a; 
     cout<<x<<endl; 
    } 
}; 

int main() 
{ 
    A a1; // non volatile object 
    a1.func(10); 
    return 0; 
} 
+2

इसे सामान्य रूप से बुलाया जाएगा। –

+0

[इस] से बचने के लिए अच्छा वाक्यांश (https://stackoverflow.com/questions/4826719/c-volatile-member- कार्यक्षमता), [यह] (https://stackoverflow.com/questions/16746070/what-does- यह-मतलब-जब-सदस्य-कार्य-अस्थिर है), और [यह] (https://stackoverflow.com/questions/2444734/what-is-the-purpose-of-a-volatile-member- फंक्शन-इन-सी) एक सटीक डुप्ली होने के नाते। – StoryTeller

उत्तर

7

नियम const सदस्य फ़ंक्शन जैसा ही है। volatile सदस्य फ़ंक्शन को गैर-volatile ऑब्जेक्ट पर कॉल किया जा सकता है, लेकिन एक गैर-volatile सदस्य फ़ंक्शन को volatile ऑब्जेक्ट पर नहीं कहा जा सका।

आपके मामले के लिए, A::func() ठीक से लागू किया जाएगा। यदि आप उन्हें विपरीत बनाते हैं, तो संकलन विफल हो जाएगा।

class A 
{ 
private: 
    int x; 
public: 
    void func(int a) // non-volatile member function 
    { 
     x = a; 
     cout<<x<<endl; 
    } 
}; 

int main() 
{ 
    volatile A a1; // volatile object 
    a1.func(10);  // fail 
    return 0; 
} 
4

तुम सिर्फ एक गैर स्थिरांक वस्तु पर एक const समारोह की तरह इसे कहते हैं, लेकिन विभिन्न कारणों के लिए कर सकते हैं।

volatile क्वालीफायर इस पैरामीटर को एक अस्थिर वस्तु के सूचक के रूप में माना जाता है।

अनिवार्य रूप से, इसका मतलब है कि ऑब्जेक्ट के डेटा सदस्य (खातों) तक पहुंचने पर अस्थिर वस्तुओं के अर्थशास्त्र लागू किए जाएंगे। x के किसी भी पठन को अनुकूलित नहीं किया जा सकता है, भले ही संकलक साबित कर सके कि अंतिम पढ़ने के बाद कोई हालिया लेखन नहीं है।

स्वाभाविक रूप से, यदि ऑब्जेक्ट वास्तव में अस्थिर नहीं है तो func का शरीर अभी भी सही है, यद्यपि यह अनुकूलित हो सकता है। तो आप इसे ठीक कह सकते हैं।

संबंधित मुद्दे