2011-07-26 35 views
12

İki ilgili soruyu burada bulabilirsiniz:C++: Bir enum değerini değer mi yoksa const başvuru olarak mı iletmek daha iyi?

A) Enum nasıl uygulanır? Örneğin, aşağıdaki kod varsa: Gerçekte neler oluyor? TYPE_1 ve TYPE_2'yi ints olarak ele alabileceğinizi biliyorum, ancak aslında sadece ints? B) Bu bilgilere dayanarak, girilen enumun değiştirilmesinin gerekmediği varsayılarak, myType öğesinin bir işlev veya bir değer referansı olarak işlev görmesi daha mantıklı olur muydu? daha iyi bir seçimdir Örneğin

:

void myFunction(myType x){ // some stuff } 

veya

void myFunction(const myType& x) { // some stuff } 

cevap

11

Hız bilge, neredeyse kesinlikle önemli değil - herhangi bir iyi C++ derleyici sadece tek bir int geçecek.

Önemli olan okunabilirliktir - bu, kodunuzu okuyucuya daha açık hale getirecektir?

Bu enumların gerçekten sadece int'ler olduğu aşikarsa, onları ints gibi sanki değere geçirirdim. Yapılandırmayı kullanmak bir programcının iki kez düşünmesine neden olabilir (asla iyi bir fikir!)

Ancak - daha sonra bunları bir sınıfla değiştirecekseniz, API'yi aynı tutarak ve yapının zorlanmasını sağlayın. .

0

geçiş dahili değeri

basit türleri (char kısa, int enum, şamandıra, imleçler)

enums, tamsayılar olarak uygulanır, onlar için değerleri açıkça belirtebilirsiniz.

0
typedef enum 
{ 
    FIRST_THING, 
    SECOND_THING 
} myType; 

Daha sonra bir int gibi kullanın. Değere göre aktar.

1

TYPE_1 ve TYPE_2 öğelerini ints olarak görebileceğinizi biliyorum, ancak aslında yalnızca ints?

Evet. Bunlar ayrılmaz tiptedir ve büyük ihtimalle bunların türü sadece int şeklindedir, çünkü bu en doğal tiptir. Böylece değere geçebilirsin; referans olarak geçmek size önemli bir avantaj getirmez. Referans için arada

, bölüm §7.2/5 diyor,

bir sıralamanın altında yatan tip numaralandırma tanımlanan tüm listeleyicisi değerleri temsil edebilir ayrılmaz bir türüdür. Bu ise uygulama tanımlı integral tip bir numaralayıcısı değeri bir int veya işaretsiz int uygun olduğu sürece, altta yatan türü int daha büyük olmayacaktır dışında bir numaralandırma için temel türü olarak kullanılır. Numaralandırıcı listesi boşsa, temel türü, numaralandırma 0 değerine sahip tek bir numaralayıcıya sahipmiş gibi olur.Bir numaralandırma tipine uygulanan bir değer, numaralandırma nesnesinin bir nesnesine veya bir numaralandırıcısına uygulanan değeri, temel türüne uygulanan.

8

C++ Standart (§ 7.2/5) bir numaralandırma altında yatan tip numaralandırma tanımlanan tüm Numaralayıcı değerleri temsil edebilir bir birleşik tipte olduğunu garanti eder. Bu yüzden değeri ona göre iletin ve kodunuzu daha karmaşık hale getirmeyin.