2013-05-28 23 views
5

मुझे कुछ डरावना मिला है जिसे मैं समझ नहीं पा रहा हूं।std :: string s() अजीब व्यवहार

std::string a(); 

मुद्रित होने पर यह 1 लौटाता है। मुझे नहीं पता कि यह कहां से आया था। मैंने सोचा कि a() तर्क के बिना एक निर्माता है, लेकिन ऐसा लगता है कि यह नहीं है।

मुझे इस बारे में जानकारी कहां मिल सकती है? और यह क्या है?

और जब std::string b(a); संकलक करने का प्रयास कर चिल्लाते हैं:

error: no matching function for call to ‘std::basic_string<char>::basic_string(std::string (&)())’ 

स्पष्टीकरण की सराहना की जाएगी।

std::string a(); 

यह एक समारोह a कहा जाता है, कोई पैरामीटर के साथ वाणी है, और एक std:string लौटने:

+3

गूगल "C++ सबसे अप्रिय पार्स" के रूप में मूल्यांकन करेंगे। – Jon

+6

देखें: http://en.wikipedia.org/wiki/Most_vexing_parse –

+4

लोग, सभी डाउनवॉट्स क्या हैं? क्या जवाब इतना स्पष्ट है कि आप सभी को तुरंत पता था कि जब समस्या थोड़ी थी तो समस्या क्या थी? एक डुप्ली के रूप में प्रश्न को बंद करने के लिए मतदान करना बहुत अच्छा है, लेकिन लोगों को जानने के लिए लोगों को थप्पड़ मारना नहीं है। – Jon

उत्तर

5

यह एक समारोह घोषणा, नहीं एक स्ट्रिंग इन्स्टेन्शियशन है।

std::string a; // C++03 and C++11 
std::string b{}; // C++11 syntax 
3
std::string a(); 

वापसी प्रकार के रूप में कोई तर्क के साथ एक समारोह और std::string घोषित करती है: ये instantiations हैं। जब आप इसे प्रिंट करने का प्रयास करते हैं, तो आप पता प्रिंट करते हैं, जो true का मूल्यांकन कर रहा है।

चेतावनी: के पते 'std :: स्ट्रिंग एक()' हमेशा [-Waddress] 'सही'

संबंधित मुद्दे