क्यों है निम्नलिखित कोड प्रिंट "XXY"? स्थानीय चर के पूरे कार्य के दायरे में नहीं रहना चाहिए? क्या मैं इस तरह के व्यवहार का उपयोग कर सकता हूं या भविष्य में सी ++ मानक में बदल दिया जाएगा?स्थानीय चर गुंजाइश सवाल
मैंने सोचा था कि सी ++ स्टैंडर्ड 3.3.2 के अनुसार, "एक नाम एक ब्लॉक में घोषणा की है कि ब्लॉक करने के लिए स्थानीय है। इसकी संभावित गुंजाइश घोषणा के स्थान पर शुरू होता है और इसके कथात्मक क्षेत्र के अंत में समाप्त होता है।"
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass(int) { cout << "x" << endl; };
~MyClass() { cout << "x" << endl; };
};
int main(int argc,char* argv[])
{
MyClass (12345);
// changing it to the following will change the behavior
//MyClass m(12345);
cout << "Y" << endl;
return 0;
}
प्रतिक्रियाओं के आधार पर मैं मान सकते हैं कि MyClass(12345);
अभिव्यक्ति (और गुंजाइश) है। यह समझ में आता है। इसलिए मैं उम्मीद करते हैं कि निम्न कोड "xYx" हमेशा प्रिंट होगा:
MyClass (12345), cout << "Y" << endl;
और यह इतनी प्रतिस्थापन बनाने के लिए अनुमति दी है: दायरे में रखते हुए बिना
// this much strings with explicit scope
{
boost::scoped_lock lock(my_mutex);
int x = some_func(); // should be protected in multi-threaded program
}
// mutex released here
//
// I can replace with the following one string:
int x = boost::scoped_lock (my_mutex), some_func(); // still multi-thread safe
// mutex released here
आपके प्रश्न में उत्तर है: * एक नाम घोषित किया गया ... *। कोई नाम नहीं है! – quamrana
इस उदाहरण में: MyClass (12345) एक फ़ंक्शन शैली कास्ट है, घोषणा नहीं। –
फिर भी, उदाहरण – artificialidiot