2012-08-29 19 views
5

सैद्धांतिक प्रश्न केवल - मैं क्यों इस तरह के कोड नहीं लिख सकते हैं: - भंडारण वर्ग विनिर्देशन (हाँ, मुझे पता है कि यह बेकार और में पदावनत हैऑटो कीवर्ड में अजीब व्यवहार सी ++ 11

auto auto foo = 0; 

पहले ऑटो कीवर्ड सी ++ 11), दूसरा ऑटो कीवर्ड - ऑटो टाइप-विनिर्देशक।

तो क्या गलत है?

और फिर - मैं वास्तव में इसे वास्तविक कोड में उपयोग नहीं करना चाहता हूं।

+0

सी ++ 11 मानक में [dcl.spec.auto] पर एक नज़र डालें। * 5: एक प्रोग्राम जो ऑटो में किसी संदर्भ में ऑटो का उपयोग करता है, स्पष्ट रूप से इस खंड में अनुमत नहीं है। * C++ 03 उपयोग से पहले कोई उल्लेख नहीं है। – chris

+0

उन्होंने वास्तव में 'ऑटो' के पुराने अर्थ को हटा दिया। मेरा खुद का प्रश्न देखें: http://stackoverflow.com/questions/12093717/why-old-usage-c03-of-auto-does-not-compile-under-c11। शायद संबंधित नहीं है - लेकिन मेरा मानना ​​है कि यह पूरी तरह से मान्य है: 'स्थिर ऑटो ए = 7;' – PiotrNycz

उत्तर

19

auto स्टोरेज क्लास विनिर्देशक "बेकार और सी ++ 11 में बहिष्कृत नहीं है", इसे पूरी तरह से हटा दिया गया है। auto कीवर्ड अब स्टोरेज क्लास विनिर्देशक नहीं है और इसका उपयोग एक के रूप में नहीं किया जा सकता है।

सी ++ 11, auto में एक साधारण प्रकार का विनिर्देशक है।

+0

ओह, मैं देखता हूं: बदलें: स्टोरेज क्लास विनिर्देशक के रूप में ऑटो को हटाएं – FrozenHeart

+2

हां, यह एक तोड़ने वाला परिवर्तन है, लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि 'ऑटो' का पुराना उपयोग (स्टोरेज क्लास विनिर्देशक के रूप में) अनिवार्य था। –

+0

बहुत बहुत धन्यवाद! – FrozenHeart

3

Stroustrup's FAQ से:

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

जो इंगित करता है कि भंडारण विनिर्देशक के रूप में "ऑटो" का उपयोग करके बहुत अधिक कोड का उपयोग नहीं किया जाता है।

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