C++11中枚举enum和union,顺带说一下内存对齐和大小端问题

本文详细介绍了C++11中的enum和union,包括C++11之前的union特性、大小端问题的解析、内存对齐原则,以及C++11之后union的新增功能。同时,讨论了无作用域和有作用域的枚举类型,以及它们的初始化规则。通过对这些知识点的总结,有助于深入理解C++中的这些不常用但重要的概念。
摘要由CSDN通过智能技术生成

这两个不太常用的小知识点,今天碰到了,所以特来总结一下。

union类

源于下面这道题

union X
{
    int a;
    struct
    {
        short b;
        short c;
    };
};
int main(){
    X x;
    x.a = 0x20150810;
    printf("%x,%x\n", x.b, x.c);
    return 0;
}
C++11之前的union

union就是里面的成员共用同一个存储空间,这个存储空间的大小与union中占用空间最大的一个成员相同

大小端问题

问输出结果的可能的值
如果按照大端模式存储:从低地址到高地址:20 15 08 10
输出从低地址到高地址:20 15 08 10
如果按照小端模式存储:从低地址到高地址:10 08 15 20
输出从高地址到低地址:08 10 20 15
一般intel平台就是小段机,所以我的电脑上就显示810,2015
大段就是一个数据,里面字节(即8位)储存的顺序跟内存一样是从低到高的
而小端就是刚好反过来。记着输出的时候还要再反义词别忘了,就跟上面说的那样。
再来一个union的题巩固一下

union S
{
    std::int32_t n;     // occupies 4 bytes
    std::uint16_t s[2]; // occupies 4 bytes
    std::uint8_t c;     // occupies 1 byte
};                      // the whole union occupies 4 bytes

int main()
{
    S s = {
  0x12345678}; // initializes the first member, s.n is now the active member
    // at this point, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值