2010-05-17 11 views
17

सी में "ऑटो" कीवर्ड का लक्ष्य क्या है? सी ++ 0x के साथ इसे नया अर्थ मिला लेकिन क्या इसका मतलब यह है कि अगर मैं सी ++ 0x कंपाइलर पर पोर्ट सी कोड को बंद करता हूं तो मेरा कोड टूट जाएगा?सी के "ऑटो" कीवर्ड का लक्ष्य

उत्तर

12

Bjarne Stroustrup में उल्लेख है उसकी C++0x FAQauto के बारे में:।

"ऑटो के पुराने अर्थ (" यह एक स्थानीय चर "है) अनावश्यक है और अप्रयुक्त कई समिति के सदस्यों लाइनों के लाखों लोगों के माध्यम से trawled कोड केवल कुछ मुट्ठी भर उपयोगों को ढूंढ रहा है - और उनमें से अधिकतर परीक्षण सूट में थे या बग्स दिखाई दिए। "

तो मुझे लगता है कि कंपेलरों को auto के पुराने अर्थ को लागू करने के लिए मानक द्वारा मजबूर नहीं किया जाएगा।

42

यदि आपके कोड में auto कीवर्ड है तो यह टूट जाएगा। सी और सी ++ प्रोग्रामिंग के लगभग 30 वर्षों में मैंने कभी भी ऐसा नहीं किया है जो मैंने किया था। कीवर्ड को पहले सी कंपाइलर में स्थानीय फ़ंक्शन वैरिएबल निर्दिष्ट करने के लिए पेश किया गया था, लेकिन कंपाइलर्स लगभग तुरंत चतुर हो गए थे, इसकी आवश्यकता नहीं थी, और इसका उपयोग करने वाले बहुत कम कोड आज जीवित रहेंगे - यही वजह है कि सी ++ 0x ने इसे रीसायकल करने के बजाय चुना एक नया कीवर्ड पेश करें जो पोर्टेबिलिटी समस्याओं का कारण बनता है।

C++ 0x में ऑटो कीवर्ड के प्रयोजन संकलक एक चर, जहां यह संभव है के प्रकार के बाहर काम करने की अनुमति के लिए है:

vector <int> v; 
auto it = v.begin(): 

संकलक कि v.begin देख सकते हैं () को vector<int>::iterator वापस करना होगा और इसलिए उस प्रकार का एक चर बना सकता है, जिसमें बहुत से कीबोर्डिंग या टाइपपीफ निर्माण को बचाया जा सकता है।

+11

यह बहुत बढ़िया है, मुझे वेक्टर इटरेटर्स टाइप करने से नफरत है;) – identitycrisisuk

+0

यह 'ऑटो' वाले कोड को क्यों तोड़ देगा? क्या पुराना अर्थ अभी भी वैध नहीं है? – Motti

+0

@mottii ईमानदार होने के लिए, मुझे यकीन नहीं है - एक कंपाइलर निश्चित रूप से देख सकता है कि 'ऑटो int i;' नए अर्थ में ऑटो का उपयोग नहीं किया जा रहा है, लेकिन मुझे यकीन नहीं है कि मानक को ऐसा करने की आवश्यकता है या नहीं। –

8

सी में, auto निर्दिष्ट स्वत: भंडारण अवधि (के रूप में static, extern, register के खिलाफ)। चूंकि यह डिफ़ॉल्ट है, मैंने कभी भी auto किसी भी कोड में उपयोग नहीं किया है। हालांकि, मैंने बहुत सी नहीं किया है।

2

इसका शायद ही कभी उपयोग किया जाता है; इसका मतलब स्थानीय चर था। आधुनिक कंपाइलर जैसे वीएस -2010 सी ++ इसे new meaning देते हैं।

+3

यह नया अर्थ सी ++ 0x मानक से ऊपर है जैसा ऊपर उल्लिखित – Stewart

4

यह उत्तर गलत है, following question देखें, मैं यहां एक संदर्भ के रूप में उत्तर छोड़ रहा हूं। auto की


AFAIK C++ 0x के उपयोग auto की सी पारम्परिक रूप से यह खंडन नहीं करता है। सी auto में प्रकार के साथ एक साथ उपयोग किया जाता है।

auto char c1 = 'a'; // OK, old meaning of auto is still valid 
auto c2 = 'b'; // OK, new meaning of auto (deduce c2 is a char) 

केवल जगह है जहाँ यह कोड के अर्थ बदल सकता है जब ऑटो निहित int शासन के साथ एक साथ इस्तेमाल किया गया था (प्रकार यदि निर्दिष्ट किया जाता है नहीं -> यह एक int है) जो मामले दूसरी पंक्ति में मेरे उदाहरण में c2int टाइप किया गया था और अब यह char प्रकार है।

+0

जी ++, एफडब्ल्यूआईडब्ल्यू के साथ संकलित नहीं है। –

+0

धन्यवाद @ नील, मैंने यह जानने के लिए एक नया प्रश्न पूछा कि कौन सही है (मुझे सी ++ 0x ड्राफ्ट कुछ भी नहीं मिला) – Motti

+1

मुझे आश्चर्य हुआ कि उन्होंने सी ++ में अन्य सभी मौसा दिए जाने के लिए अनुमति नहीं दी सी संगतता का। ;) –

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