सी ++ में आपका स्वागत है!
कुछ के लिए भी मजेदार इस प्रयास करें:
#include <string>
int main(int argc, const char *argv[])
{
std::string s;
s = 3.141592654;
return 0;
}
यह क्यों संकलित करता है? कारण यह है कि भाषा के नियम ऐसा कहते हैं।
इस भयानक मामले में इस उदाहरण के संकलन के बारे में "आधिकारिक" स्पष्टीकरण यह है कि std::string::operator+=(char)
(आईएमओ ठीक और व्यावहारिक दृष्टिकोण से तार्किक) और "इसलिए" char से असाइनमेंट (आईएमओ अजीब गैर- -sequitur)। लेकिन चार्स इनट्स (अजीब, लेकिन सी विरासत) हैं और युगल को अंतर्निहित रूप से इनट्स (अजीब, लेकिन सी विरासत) में परिवर्तित किया जा सकता है। इसलिए सी ++ में यह एक स्ट्रिंग को डबल असाइन करने के लिए अजीब (लेकिन कानूनी) है।
यदि आपको पता नहीं था तो बुरा मत मानना, अधिकांश सी ++ प्रोग्रामर जो मैंने दिखाए हैं, इस बात से परेशान थे कि क्यों ऐसा बकवास संकलित होता है और अन्य अर्थात् या कंपाइलर कीड़े के बारे में सोचा जाता है।
आपके प्रश्न के मामले में कारण यह है कि कुछ संदर्भों में इंट्स (जैसे उपयोग मामलों पर विरासत की वजह से) हैं, लेकिन किसी अन्य संदर्भ में इनट्स की तरह नहीं। यह बेतुका है लेकिन यह मानक जनादेश है।
यदि आप इस स्पष्ट रूप से तर्क की अनुपस्थिति से असहज महसूस करते हैं तो कृपया याद रखें कि सी ++ ज्यादातर लंबे इतिहास का परिणाम है और यहां तक कि एक समिति (!) भी तर्क है कि वास्तव में इसके साथ बहुत कुछ नहीं करना है। इसका यह भी अर्थ है कि कोई सी ++ का अध्ययन करने से बचने के लिए तर्क का उपयोग नहीं कर सकता है: इससे कोई फर्क नहीं पड़ता कि आप कितने बुद्धिमान हैं, आप ऐतिहासिक दुर्घटनाओं और समिति के राजनीतिक निर्णयों का अनुमान लगा सकते हैं।
उच्च सी ++ जटिलता, कई स्थानों में तर्क के इस अभाव और undefined behavior daemons
बजाय runtime error angels
की उपस्थिति भी क्या IMO मूल रूप से है प्रयोगों के द्वारा C++ सीखने बाहर नियम।
एक अच्छी किताब (या कुछ) चुनें और इसे कवर करने के लिए कवर (उन्हें) कवर करें ... दुर्भाग्य से कोई दूसरा रास्ता नहीं है। मेरे सुझाव हैं: "सी ++ प्रोग्रामिंग भाषा" (स्ट्रॉस्ट्रप), "प्रभावी सी ++" & "अधिक प्रभावी सी ++" (मेयर्स), "सी ++ एफएक्यू" (क्लाइन/लोमो/गिरौ)।
सी ++ अपने लिए एक सुंदर शक्तिशाली और अच्छा हथियार है, लेकिन गलत पक्ष से इसका संपर्क करें और यह आपके दुःस्वप्न का सबसे खराब हो सकता है। यह मानते हुए कि आप तर्क का उपयोग कर इसे समझ सकते हैं एक गलत दृष्टिकोण है (और इसलिए नहीं क्योंकि आपका तर्क कमजोर है, लेकिन क्योंकि सी ++ सिर्फ तर्क नहीं है)।
इच्छा को संकलित नहीं करना चाहिए: 'variable = EB_Element;'? – Donotalo
@ डोनोटलो: फिक्स्ड, धन्यवाद। – sharptooth