घोषणाकर्ता। हां, घोषणाकर्ता। वे बहुत सारे कोडिंग सम्मेलन बहस का स्रोत हैं। तर्कों के लिए यह वास्तव में एक अच्छा विषय है - सी ++ इस बात पर शासन नहीं करता कि कौन सा दूसरे से बेहतर है (यह परवाह नहीं करता है!)। और इसलिए हम किसी को चिंता आप का मज़ाक बना सकता है बिना इन लिख सकते हैं:वैरिएडिक टेम्पलेट्स में घोषणाकर्ता संशोधक स्थिति
int x;
int& a = x;
int &b = x;
int* c = &x;
int *d = &x;
वाक्य संदर्भ में, b
और d
"अधिक मान्य" दूसरों की तुलना में कर रहे हैं। हमें नाम से पहले घोषणाकर्ता संशोधक डालना होगा:
int m, *n; // m is an int; n is a pointer to int
लेकिन ज्वार एक के पक्ष में बदल गया है।
template<typename... Ts>
void VariadicFuncRef(const Ts... &args) { }
template<typename... Ts>
void VariadicFuncPtr(Ts... *args) { }
:
template<typename... Ts>
void VariadicFuncRef(const Ts&... args) { }
^
template<typename... Ts>
void VariadicFuncPtr(Ts*... args) { }
^
यह इन रूपों को लिखने के लिए एक त्रुटि है: सी ++ 11 के variadic टेम्पलेट्स के साथ, declarators की स्थिति प्रपत्र जहां संशोधक आधार प्रकार के करीब हैं के लिए प्रतिबंधित किया जा रहा है
एक ठोस उदाहरण के लिए, here पर क्लिक करें।
और इसलिए, मेरा प्रश्न यह है: हम इस (कानूनी) फॉर्म तक सीमित क्यों हैं और दूसरे का उपयोग नहीं कर सकते हैं?
कोई विचार लोग?
अतिरिक्त 1: मुझे इस "नियम" को लागू करने के तरीके पर डिजाइन निर्णय में भी रूचि है।
+1। बीटीडब्ल्यू, अच्छा सवाल है। – Nawaz
@ नवाज यह मेरे पास आया जब मैंने गलत वाक्यविन्यास के साथ कोड संकलित करने के लिए मिनट बिताए। सबक सीखा: उन सुविधाओं का कभी भी उपयोग न करें जिनके साथ आप आदी नहीं हैं। –
यह आपकी दुनिया को बहाल करेगा: तीन ... घोषणाकर्ता का भी हिस्सा हैं! –