2011-05-03 26 views
14

Fark eder mi? Const before or const after? 'u CGFloat'dan önce veya sonra kullanmamın CGFloat değerini sabit kılacağını tahmin ediyorum, ama işaretçiyi ne dersiniz?Yapı, CGFloat'tan önce mi sonra mı çıkıyor?

// Example.h 

extern CGFloat const kPasscodeInputBoxWidth; 


// Example.m 

CGFloat const kPasscodeInputBoxWidth = 61.0f; 
+1

ne hakkında işaretçi? – pmg

+0

Yani, "CGFloat" değerinin hafıza adresi. Bu sabit mi kalıyor? – ma11hew28

+1

'kPasscodeInputBoxWidth' bir nesneyi tanımlar (nitelenmemiş" CGFloat "türünde). Bu nesne (diğer tüm nesneler gibi) "... var, sabit bir adrese sahiptir ve ömrü boyunca son depolanan değerini korur ..." (C99 Standardında 6.2.4/2'ye bakın) : //www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf)), tanım gereği, nesnenin adresi sabittir. – pmg

cevap

19

Önce veya sonra gidebilir. Bir işaretçi durumunda, önemli olan, 'un yıldızdan mı önce mi yoksa sonra mı?

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

Ayrıca, const int * const a; ': salt okunur nesneler için salt okunur bir işaretçi de olabilir :) – pmg

+2

soru, CGFloat tamsayı işaretçileriyle ilgilidir. Tamsayılar için, Apple yönergeleri "Sabit, diğer sabitlerle ilgisizse bir tamsayı sabiti oluşturmak için const kullanabilirsiniz; aksi halde, numaralandırma kullanın.". Sadece float kullanırken const'ı savunurlar. Bkz. Https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.pdf –

+0

@MaxMacLeod: Tam tür (int, uzun, kayan nokta, çift, CGFloat vb.) Hemen hemen Burada alakasız. –

4

farketmez (Hep eski kullandım, ama tarz meselesi sanırım):

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

En azından içinde Objective-C için bu doğru mu CGFloat'un mevcut sunumu, sadece double yazım hatasıdır, bu nedenle düzenli bir ilkel veri türü ile yaptığınız gibi yapın. İşaretçiler için, const'ın yerleşimi, işaretçi mi yoksa sabit olan değer mi olduğunu belirler.

+0

'CGFloat' aslında bir' float' değil, 'double'' dir. – ma11hew28

+0

Sanırım 32-64-bit sistemler arasında değişiyor. 64-bit koşuyorum ve benim için bir çift. –

+0

İlginç. Bunu bilmiyordum. Ben sadece Xcode içinde 'CGFloat' komutunu tıklayarak aldım' CGBase.h': typedef CGFLOAT_TYPE CGFloat; ', satır 89 gidiyordu. Ancak, kaynak kodu sizin için nasıl farklı olabilir? Tüm makinelerde aynı olmamalı mıydı? Hmmm ... Ben de 64-bit koşuyor sanıyordum. Bildiğin bir "çifte" olmadığını nereden biliyorsun? – ma11hew28