बस सी ++ के साथ थोड़ा सा खेल रहा है। मैं वास्तव में क्या करना चाहता हूं वह एक सरणी या सूचक तर्क के लिए परिभाषित डिफ़ॉल्ट मानों के साथ एक फ़ंक्शन सेट करने में सक्षम होना है। चीजों को सरल रखने के लिए, आइए बस एक सरणी का उपयोग करें। इसलिए जैसा:सरणी तर्कों के लिए डिफ़ॉल्ट मान
void experimentA(char a[3] = {'a', 'b', 'c'});
संकलक (LLVM जीसीसी 4.2 GNU99 के साथ) "अपेक्षित अभिव्यक्ति" शिकायत। यह काफी उलझन में है, लेकिन मुझे सहयोगियों ने बताया कि ऐसा इसलिए हो रहा है क्योंकि 'मूल्य' जिसे मैं असाइन करने की कोशिश कर रहा हूं वह स्थिर रूप से आवंटित किया गया है, जबकि वेरिएबल जिसे मैं इसे असाइन करने की कोशिश कर रहा हूं (a[3]
) ऑटो है।
लेकिन मैं के बाद से मैं ऐसा करने में समर्थ हूँ, पूरी तरह से यकीन है कि यदि ऐसा है नहीं कर रहा हूँ:
void experimentB(char a[3] = "abc");
और संकलक केवल मुझे उस स्ट्रिंग-शाब्दिक चार करने के लिए * रूपांतरण बहिष्कृत है चेतावनी दी है ।
मुझे समझ में नहीं आता कि इस विसंगति का कारण बनने के लिए "एबीसी" मूल रूप से {'ए', 'बी', 'सी'} से अलग कैसे है। किसी भी अंतर्दृष्टि की बहुत सराहना की है!
मन "abc" रखें वास्तव में { 'एक', 'बी', 'सी', '\ 0'} है जो आकार 4 की एक सरणी में फिट होगा। –
@ डॉउग: जब एक स्ट्रिंग अक्षर का उपयोग चार की सरणी को प्रारंभ करने के लिए किया जाता है, तो शून्य टर्मिनेटर के लिए जगह नहीं होती है। यदि प्रोग्रामर एक स्पष्ट लंबाई निर्दिष्ट कर रहा है, तो उसे पता होना चाहिए कि वह क्या कर रहा है। प्रारंभिक उपयोग के मामलों के वैध उपयोग-व्याख्या करने के लिए –