Bir sınıfın bit genişliği
şu şekilde beyan edilmiş bir sınıf var:
class Payload {
uint8_t m_a : 1;
uint8_t m_b : 5;
uint8_t m_c : 2;
uint8_t m_d : 4;
};
görüyorsunuz sizeof(Payload) == 2,. Çok uzak çok iyi. Toplam bit miktarı 12'dir, 8 bit'i aştığı için 2Byte kullanılır.
Ancak sınıfın bildirdiği bit miktarını elde etmenin bir yolu var mı? '12' demek istiyorum ...? Yukarıdaki gibi, her boyutta teorik olarak, yukarıdaki gibi bit alanlarını tanımlayan her tür sınıf için algoritmanın çalışmasını sağlayın ...
Yanıtlar
Hayır, standartlara uygun bir şekilde değil.
[class.bit] / 1 :
bit alanı niteliği, sınıf üyesinin türünün bir parçası değildir
bu, bu bilgilerin derleme sırasında çıkarılamayacağı anlamına gelir. Çalışma zamanı iç gözlem tekniklerini kullanarak bu bilgileri bulmaya yönelik her türlü girişim, en iyi durumda, uygulama tanımlı davranışa dayanacaktır.
sizeof(Payload)*CHAR_BIT. Bu, yapının boyutunu bayt cinsinden alır ve onu bayt başına bit sayısıyla çarpar (teknik olarak her zaman 8 değildir). Bu işe yarar çünkü bit alanı içeren yapıların bit cinsinden boyutunun katı olmayan bit değerleri olamaz CHAR_BIT. Derleyici, son üyeden sonra dolgu bitleri ekleyecektir.