Làm cách nào để bạn khởi tạo các giá trị của cấu trúc sau trong một hàm tạo để xác định các giá trị?Cách khởi tạo một trường bit trong một hàm tạo
Cả hai tùy chọn thể hiện trong ví dụ mã của tôi dường như có một chút xấu xí ....
struct T_AnlagenInfo01
{
// Option A
T_AnlagenInfo01() : fReserve80_0(0), fReserve80_1(0),.... {};
// Option B
T_AnlagenInfo01()
{
memset(this, 0, sizeof(T_AnlagenInfo01));
}
unsigned long fReserve80_0 : 1;
unsigned long fReserve80_1 : 1;
unsigned long fReserve80_2 : 1;
unsigned long fReserve80_3 : 1;
unsigned long fReserve80_4 : 1;
unsigned long fReserve80_5 : 1;
unsigned long fReserve80_6 : 1;
unsigned long fReserve80_7 : 1;
unsigned long fReserve81_0 : 1; // 81
unsigned long fReserve81_1 : 1;
unsigned long fReserve81_2 : 1;
unsigned long fReserve81_3 : 1;
unsigned long fReserve81_4 : 1;
unsigned long fReserve81_5 : 1;
unsigned long fReserve81_6 : 1;
unsigned long fReserve81_7 : 1;
};
Hãy cẩn thận với tùy chọn 'memset' nếu bạn có các hàm ảo trong lớp, vì nó sẽ ghi đè lên vtable. –
Quy ước đặt tên khủng khiếp. Di sản, tôi đoán vậy? Dù sao, 'fReserve80_0 (0)' là cách tiêu chuẩn, và thực sự ít xấu xí và dễ bảo trì hơn và an toàn hơn so với memset. –
@phresnel: Ooooh yes ... :-(Mã cũ đã ngừng hoạt động khi được sử dụng trên một máy mới nhanh hơn –