2012-11-07 12 views
13

सी ++ 03 स्टैंडर्ड 1.9/6 नमूदार व्यवहार परिभाषित करता है:सी ++ में साइड इफेक्ट्स और अवलोकन योग्य व्यवहार कैसे हैं?

सार मशीन की नमूदार व्यवहार पढ़ता के अपने क्रम है और वाष्पशील आंकड़ों के लिखते हैं और पुस्तकालय मैं/हे कार्यों के लिए कहता है।

और फिर और फिर 1.9/7 को परिभाषित करता है दुष्प्रभाव:

एक वस्तु एक अस्थिर lvalue (3.10) द्वारा नामित एक्सेस करना, एक वस्तु को संशोधित करने, एक पुस्तकालय बुला आई/ओ समारोह, या एक फ़ंक्शन को कॉल करना जो उनमें से कोई भी ऑपरेशन सभी साइड इफेक्ट्स करता है, जो निष्पादन वातावरण की स्थिति में परिवर्तन होते हैं।

क्या कोई दुष्प्रभाव एक अवलोकन योग्य व्यवहार है या नहीं? वे एक-दूसरे से कैसे जुड़े हैं?

उत्तर

14

नहीं, एक दुष्प्रभाव जरूरी रूप से देखने योग्य व्यवहार नहीं है। एक गैर-अस्थिर वस्तु को संशोधित करना, उदाहरण के लिए, एक दुष्प्रभाव है, लेकिन देखने योग्य नहीं है। अंतर मायने रखता है क्योंकि साइड इफेक्ट्स को कंपाइलर द्वारा पूरी तरह से पुन: व्यवस्थित या हटाया जा सकता है, जब तक कि अवलोकन योग्य व्यवहार वही रहता है।

int main() 
{ 
    int a; 
    a = 30; 
    a += 2; 
    return 0; 
} 

सबसे compilers, यदि अनुरोध किया, a पूरी तरह से निकाल देंगे। इसकी अनुमति है। असाइनमेंट और अतिरिक्त देखने योग्य नहीं हैं।

हालांकि सभी अवलोकन करने योग्य व्यवहार जरूरी दुष्प्रभाव होना चाहिए।