2014-10-24 9 views
5

सी ++ गुरु हर्ब सटर का प्रस्ताव है कि हमें लगभग हमेशा "ऑटो" का उपयोग करना चाहिए। वह इसे अपने website पर बताता है और उसने हाल ही में इसे CppCon 2014 conference पर दोहराया।"हमेशा ऑटो का उपयोग करें"?

मैंने अपनी सलाह का पालन करने की कोशिश की है और मुझे विश्वास नहीं है। क्या यहां कोई है जो सूटर के साथ सहमत हैं और जो मुझे बता सकते हैं क्यों

auto gender = string{}; 
auto number = string{}; 
auto person = string{}; 

की तुलना में बेहतर

string gender, number, person; 

है जो है क्या मैं अपने कोड लेखन में, क्योंकि मैं ऑटो सहन नहीं कर सकती समाप्त हो गया है अंदाज।

संपादित करें:

auto gender = string{}, number = string{}, person = string{}; 

भी एक संभावना है, लेकिन मेरी राय में है कि और भी बदतर है।

+7

स्वयं और हर किसी को एक पक्ष बनाओ और स्ट्रिंग के बजाय std :: string का उपयोग करें। – gnasher729

+4

एक पंक्ति पर एकाधिक चर घोषित करना आमतौर पर भी डूब जाता है। – gnasher729

+0

जब आप केवल टेम्पलेट प्रकारों के साथ काम करना शुरू करते हैं, तो ऑटो (लगभग विशेष रूप से) का उपयोग करने के लिए यह समझदारी होगी। – Shaggi

उत्तर

1

ऑटो कीवर्ड मुख्य रूप से मामलों में आप किसी मूल्य के साथ चर प्रारंभ में इस्तेमाल किया जाना चाहिए, इस कोड को ऐसे मामलों में जहां आप मूल्य आप के साथ चर इनिशिएलाइज़ बदलने में अधिक maintainable बनाता है के रूप में:

uint16_t id_ = 65535; 

uint16_t id() 
{ 
    return id_; 
} 

auto myid = id(); 

नहीं के प्रकार को बदलने की आवश्यकता है यदि id() वापसी प्रकार परिवर्तन।

और सी ++ 14 के साथ यह और भी बेहतर हो जाता है:

uint16_t id_ = 65535; 

decltype(auto) id() 
{ 
    return id_; 
} 

auto myid = id(); 

id_ का प्रकार बदलने से स्वचालित रूप से id() की वापसी प्रकार और myid के प्रकार समायोजित करता है।

ऐसे मामलों में जहां चर के प्रारंभिक मान को मूल्य के साथ प्रारंभ नहीं किया गया है और चूंकि प्रारंभिकरण के लिए अन्य कोड पर निर्भर नहीं है, तो यह स्पष्ट रूप से परिवर्तनीय प्रकार को परिभाषित करने के लिए समझ में आता है, क्योंकि ऑटो कीवर्ड अधिक रखरखाव नहीं जोड़ता है कोड और सिंटैक्स auto gender = string{}; पर string gender; से कम पठनीय है।

+3

आप इस मामले में सही हैं। लेकिन सवाल एक ऐसे मामले से संबंधित है जहां एक वस्तु का सीधा निर्माण डिफ़ॉल्ट कन्स्ट्रक्टर है। मुझे यहां बताई गई स्थिति में ऑटो के साथ कोई समस्या नहीं है, लेकिन मुझे लगता है कि 'टाइप वैरिएबल' सरल है और 'ऑटो चर = प्रकार {} 'से अधिक पठनीय है। – oz1cz

+0

आह, ठीक है, मुझे लगता है कि यह एक और सामान्य सवाल था। आपका मामला एक उदाहरण है कि वह "लगभग हमेशा" क्यों कहता है। यदि आप स्थानीय ऑब्जेक्ट स्कोप में अपनी ऑब्जेक्ट्स बनाते हैं, तो यह भी समझ में आता है कि आप जानते हैं कि किस प्रकार का है और इस तरह के उस प्रकार के चर को घोषित करना चाहिए। 'ऑटो' का उपयोग चर के लिए किया जाना चाहिए जहां आपको कहीं और से मूल्य मिलता है और इसे उस मान से प्रारंभ कर सकता है (क्योंकि यह कोड को और अधिक बनाए रखने योग्य बनाता है, जैसे कि मैंने अपने उत्तर में shoved)। – heksesang

+0

वास्तविक प्रश्न का बेहतर उत्तर देने के लिए उत्तर अपडेट किया गया। – heksesang

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