Sunday 15 August 2010

Why are some local type declarations prefixed with 'struct' in C++ -


मैं अक्सर इस तरह सी ++ कोड देखता हूं:

  void foo () {struct sockaddr * से; // ...}   

क्यों struct निर्दिष्टकर्ता की आवश्यकता है? क्या यह वास्तव में कुछ भी करता है? कंपाइलर पहले से ही यह जान सकता है कि सॉकआडर को स्ट्रैट के रूप में घोषित किया गया है, इसलिए मुझे आश्चर्य है कि यह उपयोगी या आवश्यक क्यों है

मैंने इसे अतीत में हटाने की कोशिश की है और व्यवहार में कोई फर्क नहीं देखा है, लेकिन मुझे विश्वास नहीं है कि इसे दूर करना सुरक्षित है।

इसी प्रकार, बीच में अंतर क्या है इन दो? <पूर्व> आकारफ (स्ट्रक्चर सॉकाड्रर) आकार (sockaddr)

एक कोडन" शैली "के रूप में, यह सी की विरासत है, जहां कीवर्ड आवश्यक है।

सी ++ में यह ज्यादातर स्थितियों में जरूरी नहीं है, हालांकि यह कभी कभी किसी अन्य इकाई के नाम के बजाय किसी प्रकार के नाम को संकलित करने के लिए कंपाइलर को मजबूर करें (जैसे कि निम्न में से एक वैरिएबल):

  struct x {}; Int main () {int x = 42; Struct x * px = nullptr; // संरचना के बिना एक कंपाइलर त्रुटि देना होगा}   

व्यक्तिगत रूप से, मैं एक चर, या एक प्रकार के समान नाम के साथ एक फ़ंक्शन होने पर अच्छा शैली नहीं मानता, और मैं इसे से बचने के लिए पसंद करता हूं इस उद्देश्य के लिए struct कीवर्ड का उपयोग करें, लेकिन भाषा इसे अनुमति देती है।

No comments:

Post a Comment