मैं थोड़ा निम्नलिखित सी ++ कोड के बारे में उलझन में हूँ:प्रारंभ
#include <iostream>
using namespace std;
void test(const string& str)
{
static const char * const c = str.c_str();
cout << c << endl;
}
int main(int argc, char* argv[])
{
test("Hello");
test("Nooo");
return 0;
}
चर c
के बाद से static
और const
के रूप में घोषित किया जाता है, नहीं यह केवल एक बार प्रारंभ किया जाना चाहिए और अपनी प्रारंभिक मूल्य रखने प्रक्रिया पूरी होने तक? इस तर्क के अनुसार, मैं निम्नलिखित उत्पादन उम्मीद कर रहा था:
Hello
Hello
लेकिन मुझे मिल गया:
Hello
Nooo
आप स्पष्ट कर सकते हैं क्यों चर c
का मूल्य दो समारोह के बीच संशोधित किया गया है यहां तक कि इसे हालांकि कॉल const
चर है?
दरअसल यह अनिर्धारित नहीं है। ** Dereferencing ** यह अपरिभाषित है। चूंकि इसे संदर्भित करते समय हमेशा एक वैध पता होता है, यह एक वैध प्रोग्राम है। – StoryTeller
@StoryTeller, 'cout << c << endl;' सूचक को अस्वीकार करता है। –
@StoryTeller आउटपुट ऑपरेटर dereferencing का उपयोग करता है। –