什么:结构后的公共意味着什么?

时间:2013-12-29 13:58:27

标签: c++ operating-system

    struct hpet : public description_table_header
{
    uint8_t hardware_rev_id;
    uint8_t comparator_count:5;
    uint8_t counter_size:1;
    uint8_t reserved:1;
    uint8_t legacy_replacement:1;
    pci_vendor_t pci_vendor_id;
    address_structure address;
    uint8_t hpet_number;
    uint16_t minimum_tick;
    uint8_t page_protection;
} __attribute__((packed));

为什么在结构名称和__attribute__((packed))之后有公共,为什么包含在paranthesis中? 这是HPET(高精度事件计时器)的表格。

2 个答案:

答案 0 :(得分:2)

在C ++中,冒号:后跟可选的public / private / protected指示符,类型名称是指定继承的语法。

在您的代码中,hpet类继承description_table_header类。

有关公共,私有和受保护继承之间差异的讨论,请参阅this answer

答案 1 :(得分:2)

代码是C ++而不是C标记它。这是一个非常重要的细节。

public这里是继承的访问说明符(结构继承自description_table_header)。这将包含在所有优秀的C ++教科书中。关于SO的相关问题是:Difference between private, public, and protected inheritance。实际上并不需要public struct的规范,因为对于结构来说,这是默认值。

__attribute__((packed))是特定于编译器的扩展,用于指定struct的布局。在这种情况下,struct被打包,以便结构中没有填充。