假设我在某处声明了以下枚举:
enum yin_yang {
yin,
yang
};
我希望像这样使用新的数据类型:
yin_yang balance = yang;
系统的内存将“平衡”占用多少? 1位,1字节还是别的什么?
答案 0 :(得分:3)
它是否实际占用内存取决于优化器对您的代码执行的操作,但如果您想知道类型或对象的字节大小,则可以使用sizeof
运算符:
std::cout << sizeof(yin_yang) << std::endl;
std::cout << sizeof(balance) << std::endl;
这并不意味着balance
实际上必须在运行时占用内存空间。它可以完全优化。但是在编译时可以知道对象的大小。
答案 1 :(得分:2)
至少在C ++ 11中,您可以指定要用作枚举基础的整数类型:
render
否则编译器选择基类型,它将是一个整数类型,但是没有指定哪个IIRC(我相信很多编译器默认为enum yin_yang : uint8_t {
yin,
yang
};
)。基类型确定枚举实例的存储要求。
答案 2 :(得分:0)
您可以使用一元运算符'sizeof'来计算任何变量或数据类型的大小,以字节大小单位的数量来衡量。
答案 3 :(得分:0)
对于范围内的枚举,相关部分摘自C ++ 14, [decl.enum] :
对于其基础类型未修复的枚举,基础类型是一个整数类型,可以表示枚举中定义的所有枚举器值。如果没有整数类型可以表示所有枚举器值,则枚举是不正确的。它是实现定义的,使用整数类型作为基础类型,除了基础类型不应大于
int
,除非枚举器的值不适合int
或unsigned int
。如果枚举器列表为空,则基础类型就好像枚举具有值为0
的单个枚举器。
因此,如果枚举状态在int
中可表示,那么它保证为≤sizeof(int)
,如果不是,则保证更大。<asp:GridView CssClass="table table-striped table-bordered table-condensed"
ID="gvDatos" runat="server" DataKeyNames="IdIngrediente" AllowPaging="True" PageSize="4"
onselectedindexchanged="GridView_SelectedIndexChanged" onrowcreated="gvDatos_RowCreated" onpageindexchanging="gvDatos_PageIndexChanging">
当然,如果您明确指定了基础类型,那么您就知道它的大小了。
答案 4 :(得分:0)
枚举类型是一种特殊的数据类型,它使变量可以是一组预定义的常量,无论它有多少个单位
例如,
枚举天数{星期日,星期一,星期二,星期三,星期四,星期五,星期六};
枚举字母{a,b,c,d};
以上两个枚举数据的大小仅为4个字节