तो आज मैंने बग को खोजने के लिए काफी कठिन लिखा जहां मैंने std :: string को nullptr में प्रारंभ किया (std :: स्ट्रिंग के लिए पॉइंटर नहीं, बल्कि मान स्वयं)। मुझे स्पष्ट रूप से पता चला है कि सी ++ 11 या बाद में क्लैंग के साथ करना संभव है।आप std :: स्ट्रिंग को nullptr क्यों असाइन कर सकते हैं?
#include <string>
#include <iostream>
using namespace std;
class Meh{
int x;
};
class Foo
{
private:
std::string x=nullptr;
Meh y=nullptr; //remove this line and it compiles
public:
std::string z=nullptr;
};
int main(void)
{
Foo f;
cout << f.z;
return 0;
}
जैसा कि आप देख सकते हैं, मैंने कक्षा के केवल एक यादृच्छिक उदाहरण के लिए nullptr असाइन करने का प्रयास किया और यह काम नहीं किया। स्ट्रिंग में कौन सा जादू है जो इसे काम करने की अनुमति देता है, और यह किस तरह से वैध वाक्यविन्यास है? मुझे लगता है कि इस मामले में मुझे एक प्रकार कास्टिंग त्रुटि से मुलाकात की जाएगी।
संदर्भ के लिए मैं इस के साथ संकलित:
clang++ test.cpp -O3 -g -fno-inline -std=c++11 -Wall
यह चेतावनी की कोई रूप नहीं दिया, हालांकि यह बाहर त्रुटि होगा यदि का उपयोग नहीं सी ++ 11
यह ध्यान देने योग्य है कि यह अनिर्धारित व्यवहार ™ – Puppy
क्यों यह सी ++ 11 से पहले काम नहीं करता है? – Earlz
@Earlz 'nullptr' C++ 11 से पहले मौजूद नहीं था। – hvd