2013-07-03 41 views
9

Temelde iki soru ilişkili olabilir, böylece bunları bir tanesine koyacağım.En ++ C++ 11 sınıfı C++ 11 referans veya değer olarak

Enote sınıfını, işleve geçerken C++ 11'e referans veya değer vererek geçirmeliyiz. İlkel türünü miras alıyor, ama geçilen tüm nesne mi? Enum sınıfları güvenli olduğundan

enum class MyEnumClass : unsigned short { 
    Flag1 = 0, 
    Flag2 = 1, 
    Flag3 = 2, 
    Flag4 = 4, 
}; 

Şimdi

const char* findVal(const MyEnumClass& enumClass); 
            ^
    should this be by const ref? __| 

benim diğer soru burada biz fonksiyon sig söylüyorlar sağlar -

SHOULD IT BE BY MOVE like (MyEnumClass&&) - I am still learning/understanding 
move semantics and rvalue so I am not sure if move semantics are only for 
constructors or can be for member or static funcs - 

cevap

4

O ilkel tip miras değil ama yerine kullanmak uygulanmasını söyler Belirtilen türler için altyazı olarak belirtilen tür (unsigned short).

Enum sınıfı nesnesini başka bir sınıf nesnesi olarak basitçe işleyebilir ve işlevlere aktarırken aynı kuralları uygulayabilirsiniz.

  • Enum sınıfı nesnesinin içindeki işlevini değiştirmek isterseniz, başvuruyu iletin.
  • Sadece içerdeki nesneyi okumak istiyorsanız, sürekli referans ile iletin.

Anlambilim, performans yoğun olan bir kopya anlamsallığı uygulamak yerine, rıhtımlardan hareket etme fırsatlarını kullanan bir dil çalışma zamanı performans geliştirme özelliğidir. r-değeri referansları ve hareket semantiği, yalnızca kurucu ve hareket ataması operatörünü taşımakla kalmaz, aynı zamanda diğer işlevlerle de kullanılabilir. Bu optimizasyondan faydalanabilecek senaryolarınız varsa, bunlardan yararlanmak için mükemmeldir.

+3

Muhtemelen bu durumda hareket etmekten başka bir şey elde edilemeyeceğine işaret etmeye değer. – juanchopanza

+0

@juanchopanza: Doğru, kesin olarak işaret edildi. Teşekkürler! –

3

Sayımcıların belirtilen türdeki unsigned short türünü Alok Save işaretinin işaret ettiği gibi kullandığını düşünürsek, bu tür nesneleri değer olarak iletmek iyi bir fikirdir (işlevlerindeki bir değeri yan yana değiştirmek istemediğiniz sürece) Bu durumda, bir referans kullanmalısınız.)