2015-07-22 7 views
5

मैं इस articleयह सबसे अधिक परेशान पार्स कैसा है?

के माध्यम से जा रहा था और वहाँ आइटम 3 में एक बयान

// C++98 
rectangle  w(origin(), extents());  // oops, vexing parse 

कैसे एक सबसे अप्रिय पार्स से ऊपर है कह रहा है। यदि मैं यह

struct origin 
{ 
}; 
struct Rectangle 
{ 
    Rectangle(const origin& s) 
    { 
    } 
}; 

बयान की तरह कुछ किया

Rectangle s(origin());  

ठीक काम करता है और एक अप्रिय पार्स जैसा नहीं होता है। लेखक ने क्यों कहा कि यह एक परेशान पार्स है। क्या यह एक टाइपो है या क्या मुझे कुछ याद आ रहा है?

+0

दस्तावेज़ के अनुभाग 1 (बी) देखें, यह इन परेशान पार्सों को बताता है। – Barmar

+3

आप क्यों कहते हैं 'आयताकार (मूल());' एक वेक्सिंग पार्स जैसा नहीं है? यह सबसे परेशान पार्स का कैनोलिक उदाहरण है। आपको क्या लगता है कि सबसे ज्यादा परेशान पार्स है, अगर नहीं? –

+1

घोषणा ठीक काम करता है। * * 'S का उपयोग करने का प्रयास करें और देखें कि क्या होता है। – molbdnilo

उत्तर

8

Rectangle s(origin()); भी एक परेशान पार्स है। यह एक समारोह s घोषित करता है जो rectangle देता है, और origin लौटने के लिए तर्क सूचक के रूप में लेता है। सुनिश्चित नहीं है कि "ठीक काम करता है" से आपका क्या मतलब है।

rectangle w(origin(), extents()); एक समारोह wrectangle लौटने और तर्क लेने की घोषणा की: सूचक origin लौटने कार्य करने के लिए, और सूचक extents लौटने कार्य करने के लिए।

अधिक जानकारी के लिए see this question या टैग के तहत अन्य प्रश्नों को ब्राउज़ करें।

+0

ठीक काम करता है मेरा मतलब था कि यह कोई त्रुटि के साथ संकलित करता है। मैं इस धारणा के तहत हूं कि एक परेशान पार्स संकलन समय त्रुटि देगा। उदाहरण के लिए 'foo a();' का उपयोग करके कक्षा 'foo' के लिए;' संकलन करते समय त्रुटि होगी और यह सबसे अधिक परेशानी पार्स का एक रूप होगा। –

+0

@ जेम्स फ्रैंको, जब तक आप इसे उपयोग करने का प्रयास नहीं करते हैं, तब तक यह एक ऑब्जेक्ट – sbabbi

+3

@ जेम्स फ़ैंको है यदि यह वैध घोषणा नहीं है, तो यह एक परेशानी पार्स नहीं होगा। "Vexing" भाग इसलिए है क्योंकि आपने एक परिवर्तनीय घोषणा लिखने की कोशिश की लेकिन यह एक समारोह घोषणा के रूप में वाक्य रचनात्मक रूप से मान्य हुआ। समारोह घोषणा कानूनी रूप से कानूनी हैं। –

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