2010-05-27 12 views
5

मानक कहते हैंसी ++ में एक चर क्या है?

एक चर एक वस्तु की घोषणा से शुरू की है। चर का नाम ऑब्जेक्ट को दर्शाता है।

लेकिन इस परिभाषा का वास्तव में क्या अर्थ है?

क्या कोई वैरिएबल किसी ऑब्जेक्ट को नाम देता है, यानी अन्यथा अज्ञात ऑब्जेक्ट्स के लिए एक नामकरण तंत्र चर है? या नाम एक चर है?

या एक वैरिएबल नामित वस्तु है जो इस अर्थ में है कि प्रत्येक चर भी एक वस्तु है?

या एक वैरिएबल सिर्फ एक "प्रॉक्सी" नाम है जो सभी ऑब्जेक्ट्स को वास्तविक ऑब्जेक्ट में "प्रतिनिधि" करता है?

चीजों को और भ्रमित करने के लिए, कई सी ++ किताबें चर और शब्दों को समानार्थी के रूप में मानती हैं।

इस पर आपका क्या लेना है?


संस्थाओं के बारे में, C++ 0x मसौदे से उद्धृत:

एक इकाई है एक मूल्य, वस्तु, संदर्भ, समारोह [...]

हर नाम है कि एक अर्थ है एक घोषणा द्वारा इकाई पेश की जाती है।

एक चर एक वस्तु

इन बयानों मैं निष्कर्ष है कि एक चर एक नाम है और इस तरह एक वस्तु नहीं हो सकता आकर्षित से की घोषणा से शुरू की है। यह वास्तव में मेरे बाहर नरक को भ्रमित कर रहा है :)

+0

@FredOverflow साथ एक इकाई है। यह कहता है: __3000__ _ किसी भी प्रश्न को बंद करने, फिर से खोलने या माइग्रेट करने के लिए वोट करें – sbi

+0

@ एसबीआई: उत्तर देने के लिए धन्यवाद, मुझे कहना होगा कि मैं 2 अन्य लोगों से अधिक 'करीबी' का उपयोग करता हूं, वहां बहुत सारे डुप्लीकेट हैं :) –

उत्तर

16

चर वस्तुओं का नाम रखा गया है। वस्तुओं है कि चर

new int // create one int object 
std::string() // create one string object 

निम्नलिखित नाम "foo" के साथ एक सरणी चर पैदा नहीं कर रहे हैं बनाने के बाद और 5 अज्ञात (उप) प्रकार की वस्तुओं "पूर्णांक"

int foo[5]; 

निम्नलिखित नहीं है सी ++ 03 में एक चर, लेकिन has become a variable C++ 0x में (घोषित संदर्भ, C++ 0x में चर रहे हैं जानकारी के लिंक को देखने के लिए)

extern int &r; 

क्या कोई वैरिएबल किसी ऑब्जेक्ट को नाम देता है, यानी अन्यथा अज्ञात ऑब्जेक्ट्स के लिए एक नामकरण तंत्र चर है?

चर वस्तुएं क्रमशः (या क्रमशः संदर्भ) हैं। सी ++ में इकाई सूची (3/3 सी ++ में) में कई ऐसे हैं-एक रिश्तों। उदाहरण के लिए, एक उप-ऑब्जेक्ट-ऑब्जेक्ट और एक सरणी तत्व है-एक ऑब्जेक्ट और क्लास-सदस्य-ऑब्जेक्ट या फ़ंक्शन या टाइप या टेम्पलेट या एन्युमरेटर है।

सी ++ 0x की इकाई सूची मेरे लिए थोड़ा क्लीनर दिखती है, और इसमें "चर", "फ़ंक्शन का उदाहरण" नहीं है (यह कि किस तरह की इकाई कभी भी मेरे लिए स्पष्ट नहीं है) , "सब-ऑब्जेक्ट" और "सरणी तत्व" अब और। इसके बजाय इसमें "टेम्पलेट विशेषज्ञता" जोड़ा गया जो या तो कार्य, कक्षाएं या टेम्पलेट्स (आंशिक विशेषज्ञता) हैं।

1.8 में सी ++ ऑब्जेक्ट मॉडल का कहना है

एक वस्तु एक नाम (खंड 3) हो सकता है।

तो यदि आप चाहें तो आप कथन को "ऑब्जेक्ट का नाम ऑब्जेक्ट को दर्शाता है" के रूप में बना सकते हैं।

+0

+1 मेरा ले बिल्कुल –

+1

केवल * घोषित * संदर्भ C++ 0x में चर हैं; उदाहरण के लिए, 'static_cast (व्यक्ति) 'एक चर नहीं है, बल्कि एक बेहतर शब्द की कमी के लिए" अज्ञात संदर्भ "है। – fredoverflow

+0

किसी ऑब्जेक्ट का एक और उदाहरण उदाहरण जो चर नहीं है, एक अज्ञात वस्तु किसी अन्य चीज़ के तर्क के रूप में पारित होती है। – detly

2

वेरिएबल्स वे नाम हैं जिन्हें आप ऑब्जेक्ट्स देते हैं, इसलिए हाँ, ऑब्जेक्ट्स, बड़े और अज्ञात हैं।

0

मुझे लगता है कि यह परिभाषा काफी स्पष्ट है।

परिवर्तनीय घोषणा द्वारा प्रस्तुत किया गया है और वस्तु को दर्शाता है। चर का परिचय कौन देता है? आप निश्चित रूप से करते हैं, और इस प्रकार आप इसका उपयोग करते हैं।

एक चर वास्तव में डेवलपर के लिए केवल एक सुविधा है। यह का सबसे मौलिक पहलू है प्रोग्रामिंग भाषाएं केवल सी ++ नहीं। एक परिवर्तनीय मोरली एक उपयोग करने योग्य इकाई को प्रतीकात्मक नाम देता है जो भंडारण पर कब्जा करता है, जैसे कि इसे संदर्भित किया जा सकता है और आपके स्रोत कोड में भविष्य के बिंदु पर उपयोग किया जा सकता है।

उदाहरण के लिए आप इस तरह के रूप में एक विधि में एक चर घोषणा करते हैं:

int x = 5; 

यह कुछ ढेर सूचक से ऑफसेट करने के लिए संकलक द्वारा कम हो जाएगा, कहना सपा + 0x003।

उसके कुछ समय बाद आप कह सकते हैं:

x = 52; 

इस मामले में के ढेर स्मृति सपा क्षेत्र + 0x003 बाइट्स उस नंबर का वर्णन 52.

आप चर घोषित होने के लिए शामिल होंगे एक निश्चित प्रकार के ताकि संकलक काम कर सके कि डेटा स्मृति में कितनी जगह पर कब्जा कर लेता है। चर के बिना, आपको स्वयं की जानकारी की सभी व्यवस्था का प्रबंधन करना होगा और आप शायद असेंबली या कम में कोडिंग करेंगे।

+0

मुझे आपकी परिभाषा मिलती है "वेरिएबल घोषणा द्वारा प्रस्तुत किया गया है और ऑब्जेक्ट को इंगित करता है" लेकिन दुर्भाग्यवश, यह मानक नहीं कहता है :) के अनुसार मानक, एक * ऑब्जेक्ट्स * घोषित करता है, और यह वेरिएबल नहीं है जो ऑब्जेक्ट को इंगित करता है, लेकिन चर का * नाम * :( – fredoverflow

+0

अरे, शायद मुझे मानक लेखक भी बनना चाहिए :-)। एक तरफ, मुझे लगता है कि इसे मानकों के दस्तावेज़ को पढ़कर एक भाषा सीखना स्वयं हानि का एक रूप है ... –

0

एक चर वास्तव में स्मृति में किसी ऑब्जेक्ट को दिया गया नाम है और इसलिए संकलन से पहले बिंदु पर उस वस्तु में एक अज्ञात प्रकार है, जब संकलन होता है, तो चर को वाक्य रचनात्मक और पार्सिंग के दौरान ट्रैक रखा जाता है चरण, तब जब लिंकर इसमें शामिल हो जाता है, तो उस चर के पास एक मेमोरी एड्रेस होगा, हालांकि रन-टाइम पर, उस मेमोरी एड्रेस को डायनामिक लिंकिंग या स्टेटिक लिंकिंग के कारण कहीं भी सही ढंग से ऑफ-सेट किया जाएगा। इसलिए चर को आसानी से संदर्भित किया जा सकता है जो मेमोरी एड्रेस को संदर्भित करता है जिसे चर निर्दिष्ट किया जाता है।

असल में, संक्षेप में, परिवर्तक प्रोग्रामर को निष्पादन के जंक्शन बिंदुओं को काम करने में मदद करना है जहां उस चर को मशीन कोड के संदर्भ में संदर्भित किया जाता है।

1

इस पर आपका क्या लेना है?

चर ढेर पर या कोड खंड में स्मृति का एक ब्लॉक है, या एक रजिस्टर में एक मूल्य है (चर का आकार काफी छोटा है, हालांकि आम तौर पर यह एक स्मृति में अभी भी मूल्य है है अगर जबकि रजिस्टरों अस्थायी परिणामों पकड़) , प्रोग्रामर की सुविधा के लिए प्रदान किए गए नाम के साथ। संकलन के बाद चर का नाम मौजूद नहीं है (हम यहां मैक्रो चाल के बारे में बात नहीं कर रहे हैं)। चर के लिए किसी भी पहुंच को स्मृति पहुंच में हल किया गया है, इसलिए तकनीकी रूप से परिवर्तनीय संबंधित डेटा ब्लॉक का पता है, और वह पता कहीं भी संग्रहीत नहीं है। असेंबली भाषाओं में चर के घोषणापत्र के बारे में सोचें - परिवर्तनीय "kinda" मौजूद है, लेकिन यह अभी भी डेटा ब्लॉक के लिए एक ऑफसेट है।

+0

ऑब्जेक्ट ढेर पर, ढेर पर, या डेटा सेगमेंट में मौजूद हैं। – ChrisW

+0

आपने मुझे समझा, इसलिए नाइटपिकिंग का कोई कारण नहीं है। – SigTerm

+0

वास्तव में एकमात्र अच्छा जवाब है। वेरिएबल्स वास्तव में मेमोरी पतों पर पॉइंटर्स हैं जो संकलक आपके लिए बताते हैं क्योंकि यह संख्या के बजाए नाम का उपयोग करने के लिए अधिक मूर्खतापूर्ण है। – Zorf

0

परिवर्तनीय वस्तु का नाम है। आप इस नामित इकाई के माध्यम से वस्तु का उपयोग करते हैं। पढ़ें http://stackoverflow.com/faq पर _Fine_ मैनुअल:

1

एक चर बस एक प्रकार है और एक नाम

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