2011-05-03 14 views
14

क्या इससे कोई फर्क पड़ता है? Const before or const after? मुझे लगता है कि मैंने constCGFloat से पहले या उसके बाद रखा है, यह CGFloat स्थिरता का मान बनाता है, लेकिन सूचक के बारे में क्या है?क्या CGFloat से पहले या बाद में जाना जाता है?

// Example.h 

extern CGFloat const kPasscodeInputBoxWidth; 


// Example.m 

CGFloat const kPasscodeInputBoxWidth = 61.0f; 
+1

क्या पॉइंटर के बारे में क्या है? – pmg

+0

मेरा मतलब है, 'CGFloat' के मान का स्मृति पता। क्या यह स्थिर रहता है? – ma11hew28

+1

'kPasscodeInputBoxWidth' किसी ऑब्जेक्ट को पहचानता है (अयोग्य प्रकार' CGFloat')। वह ऑब्जेक्ट (अन्य सभी ऑब्जेक्ट्स के रूप में) '"... मौजूद है, एक निरंतर पता है, और अपने पूरे जीवनकाल में अपने अंतिम संग्रहीत मूल्य को बरकरार रखता है ..." (देखें [सी 99 मानक] में 6.2.4/2 (http : //www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf)), इसलिए, परिभाषा के अनुसार, ऑब्जेक्ट का पता निरंतर है। – pmg

उत्तर

19

यह या तो पहले या बाद में जा सकता है। सूचक के मामले में, क्या मायने रखता है कि const तारांकन से पहले या उसके बाद समाप्त होता है:

const int *a; // pointer to const int -- can't change what a points at 
int const *a; // same 

int *const a; // const pointer to int -- can't change the pointer itself. 
       // Note: must be initialized, since it can't be assigned. 
+4

आप 'const int * const a;' भी पढ़ सकते हैं: केवल पढ़ने के लिए ऑब्जेक्ट्स पढ़ने के लिए केवल पॉइंटर :) – pmg

+2

प्रश्न CGFloat से पूर्णांक पॉइंटर्स से संबंधित नहीं है। पूर्णांक के लिए, ऐप्पल दिशानिर्देश बताते हैं "यदि निरंतर स्थिरांक अन्य स्थिरांक से संबंधित नहीं है, तो आप एक पूर्णांक स्थिर बनाने के लिए कॉन्स्ट का उपयोग कर सकते हैं; अन्यथा, गणना का उपयोग करें।" वे फ्लोट का उपयोग करते समय केवल वसा का समर्थन करते हैं। Https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.pdf –

+0

@MaxMacLeod देखें: सटीक प्रकार (int, long, float, double, CGFloat, आदि) बहुत अधिक है यहां अप्रासंगिक। –

4

इससे कोई फर्क नहीं करता है (मैं हमेशा पूर्व का उपयोग किया है, लेकिन मुझे लगता है कि यह शैली की बात है):

const CGFloat kPasscodeInputBoxWidth = 61.0; 
CGFloat const kPasscodeInputBoxWidth = 61.0; 

कम से कम में ऑब्जेक्टिव-सी के लिए यह सही है CGFloat का वर्तमान प्रस्तुति, यह केवल double का एक टाइपिफ़ है, इसलिए आप नियमित रूप से आदिम डेटाटाइप के साथ ऐसा करेंगे। पॉइंटर्स के लिए, कॉन्स का प्लेसमेंट निर्धारित करेगा कि यह सूचक या मूल्य स्थिर है, इसलिए इसके लिए यह महत्वपूर्ण है।

+0

'CGFloat' वास्तव में एक 'फ्लोट' है, न कि 'डबल'। – ma11hew28

+0

मुझे लगता है कि यह 32- और 64-बिट सिस्टम के बीच बदलता है। मैं 64-बिट चलाता हूं और मेरे लिए यह एक डबल है। –

+0

दिलचस्प। मुझे यह नहीं पता था। मैं बस 'cGBase.h' की लाइन 89 से जा रहा था:' टाइपिफ़ CGFLOAT_TYPE CGFloat; ', जो मुझे एक्सकोड में' CGFloat' पर कमांड-क्लिक करके मिला। लेकिन, स्रोत कोड आपके लिए अलग कैसे हो सकता है? क्या यह सभी मशीनों पर समान नहीं होना चाहिए? हमम ... मैंने सोचा कि मैं 64-बिट भी चला रहा था। आप कैसे जानते हैं कि यह 'डबल' नहीं है? – ma11hew28

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

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