首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么声明了枚举的C++类的大小是1?

在C++中,枚举是一种特殊的数据类型,用于定义一组具有离散值的常量。枚举的大小在C++标准中并没有明确规定,因此不同的编译器可能会有不同的实现方式。

然而,有些编译器会将枚举类型的大小设置为1字节。这是因为枚举类型的取值范围通常比较小,可以用一个字节来表示。在这种情况下,枚举类型的大小被限制在1字节,以节省内存空间。

尽管枚举类型的大小被限制为1字节,但它并不意味着枚举类型只能表示8个不同的值。实际上,枚举类型的取值范围取决于编译器的实现,可以是任意大小的整数。

对于C++类声明了枚举的情况,类的大小通常不仅仅是枚举类型的大小。类的大小还取决于其他成员变量的大小和对齐方式。因此,声明了枚举的C++类的大小不一定是1,而是根据类的其他成员变量来确定的。

总结起来,声明了枚举的C++类的大小不一定是1,而是根据类的其他成员变量来确定的。枚举类型的大小通常被限制在1字节,以节省内存空间。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++大小计算

首先我们看什么都没有的时候例子: class test{ }; 可以看到,实例化对象大小1。...不过注意,如果空白作为基被继承了的话,不会对继承它空间产生影响,即在继承一瞬间,基大小变为0,而继承它大小只与自己成员变量有关(此处默认为单一继承): #include <...我们还可以验证下: 于是,空间从1字节变成了4字节,不再像空那样1字节了。...总结 大概总结下,大小需要考虑以下内容: 所有非静态成员变量大小 数据对齐到多少位 有无虚函数(即需不需要指向虚函数表指针,如果考虑继承情况,则还需要看继承了多少个指向虚函数表指针) 参考 C...++中空占一字节原因详解:建议看,对空白讲解比较详细 sizeof计算空间大小总结 《C++ Primer 第5版》

96720

c++ 容器_下面属于容器

C++容器包括“顺序存储结构”和“关联存储结构”,前者包括vector,list,deque等;后者包括set,map,multiset,multimap等。...支持不指定vector大小存储。...通常此默认内存分配能完成大部分情况下存储。 优点:(1) 不指定一块内存大小数组连续存储,即可以像数组一样操作,但可以对此数组进行动态操作。...可以不分配必须内存大小方便进行添加和删除操作。使用是非连续内存空间进行存储。 优点:(1) 不使用连续内存完成动态操作。...重载版本使用了输入比较操作。 堆算法: C++ 标准库提供 max-heap 。一共由以下 4 个泛型堆算法。 make_heap :把范围内元素生成一个堆。

1K20

Java日期时间从为什么从1970年11日开始?

说java起源于UNIX系统,而UNIX认为1970年11日0点时间纪元。...----------------------------------------------------------------------------- 但这依然没很好解释"为什么",出于好奇,继续...另外1年365天总秒数31536000秒, 2147483647/31536000 = 68.1年 也就是说32位能表示最长时间68年,而实际上到2038年01月19日03时14分07秒,便会到达最大时间...位来表示时间最大间隔68年,而最早出现UNIX操作系统考虑到计算机产生年代和应用时限综合取了1970年11日作为UNIX TIME纪元时间(开始时间),而java自然也遵循了这一约束。...8点而非0点,原因存在系统时间和本地时间问题,其实系统时间依然0点,只不过我电脑时区设置为东8区,故打印结果8点。

4.6K20

「源码分析」— 为什么枚举单例模式最佳方法

1. 引言 枚举类型(enum type)在 Java 1.5 中引入一种新引用类型,由 Java 提供一种语法糖,其本质 int 值。...关于其用法之一,便是单例模式,并且在《Effective Java》中有被提到: 单元素枚举类型已经成为实现 Singleton 最佳方法 本文便是探究 “为什么枚举单例模式最佳方法?”。...本文内容概要如下: 回顾常见单例模式方法; 探索 Java 中枚举如何防止两种攻击; 若不使用枚举,又如何防止两种攻击。 2....EnumSingleton 中没有无参构造器,那枚举构造函数怎么样?...Java 生成枚举都会继承 Enum 抽象,其只有一个构造函数: public abstract class Enum> implements Comparable

1.2K60

为什么C++最难学编程语言?

c++最大缺点让你花费大量时间学习这门语言语法上,而不是解决问题本身上 等我学会了C++我就回家结婚 这个世界本来就是残酷,所以你不能怪C++向你展示了世界本质 大家都觉得很难等你攀登到高峰时候发现...当然这其中有很多程序员自嘲语意多一点,但是C++的确难道很多英雄好汉,让很多在深陷其中无法自拔但又不舍得抽身离去。 为什么C++让人觉得这么难学?...1.C++设计理念本身想通过各种规则克服C语言里面由于语法规则不清晰导致在运行过程中出现一些错误,这下让初学者倒霉了,很多初学者在学到泛型编程会觉得编译过去太费劲了,好多条条框框卡死死,必须要按照语法规则走才能进行下去...现在很多有名软件框架都能看到C++影子,其实很简单,在进行面向对象框架设计还能不影响效率首选只能C++,现在大家使用安卓手机框架层很多代码都是C++,还有大家天天使用浏览器内核代码几乎全是...C++,在很多领域C++有着不可比拟优势,学会了会明白为啥这门语言属于编程语言王者,为什么有这么多人学不会还要硬着头皮继续学,可以说C++一门啃着最有滋味编程语言,痛苦并快乐着。

2.1K31

为什么Java里面String不可变

在Java里面String类型不可变对象,这一点毫无疑问,那么为什么Java语言设计者要把String类型设计成不可变对象呢?这是一个值得思考问题。...ok,下面我们来分析下为什么String不可变? 通过String源码可以看到,String类型底层由final修饰char数组存储。..."; assertThat(s1 == s2).isTrue(); s1和s2变量指针内存地址其实是一样,也就是说他们代表同一个对象,这是jvm常量池做优化,当第一个字面量声明时候,它值会被字符串常量池存储...总结: 本文主要介绍了Java语言里面String类型为什么设计成不可变类型,以及分析了不可变类型带来主要优势,需要注意虽然不可变类型能够带来不少好处,但并不是说其没有弊端,不可变类型每一次修改都需要在内存中新生成一个对象...,从另一个方面说针对经常变化对象是不适合使用不可变类型,这也是为什么Java里面还提供了可修改值StringBuilder和StringBuffer,这在实际开发中常常是需要根据具体情况权衡

69740

为什么 Thread sleep()和 yield ()方法静态

在 Java 编程语言中,Thread 提供了多线程编程所需方法和功能。其中包括 sleep() 和 yield() 两个方法,它们分别用于线程阻塞和切换。...相比其他实例方法而言,这两个方法静态。下面将就这一问题进行解释。 1、sleep() 方法 sleep() 方法可以使一个正在执行线程进入休眠状态指定时间毫秒或纳秒等待异步任务任务完成。...原因:在创建和启动线程时已经创建了 Thread 对象,因此调用 sleep() 方法并不需要依赖于任何特定线程对象,而只需要使用名直接调用即可。...相反,它通知操作系统让出当前线程 CPU 时间片。 然而,值得注意,使用 yield() 方法不能保证使另一个略高一点优先级线程获得CPU执行时间。...总之,sleep() 和 yield() 方法都是 Thread 中实现多线程编程必须方法,能够有效地实现线程阻塞、切换和协作,从而提高多任务处理效率和性能。

17130

P1458 顺序分数 Ordered Fractions(有技巧枚举)+C++封装=精简代码

题目描述 输入一个自然数N,对于一个最简分数a/b(分子和分母互质分数),满足1<=b<=N,0<=a/b<=1,请找出所有满足条件分数。...注:①0和任意自然数最大公约数就是那个自然数②互质指最大公约数等于1两个自然数。...输入输出格式 输入格式: 单独一行一个自然数N(1…160) 输出格式: 每个分数单独占一行,按照大小次序排列 输入输出样例 输入样例#1: 5 输出样例#1: 0/1 1/5 1/...4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1 说明 USACO 2.1 翻译来自NOCOW 没有什么可以说,直接按照题目给枚举即可,网上代码好长,好乱,...看到一个小伙计用,启发了我,抛玉引砖,有一点比较分数大小,交叉相乘。

49620

c++之类成员变量和成员函数分开存储

C++程序内存格局通常分为四个区: 全局数据区(data area),代码区(code area),栈区(stack area),堆区(heap area)(即自由存储区)。...全局数据区存放全局变量,静态数据和常量; 所有成员函数和非成员函数代码存放在代码区; 为运行函数而分配局部变量、函数参数、返回数据、返回地址等存放在栈区;余下空间都被称为堆区。...根据这个解释,我们可以得知在定义时,成员函数被放在代码区,而静态成员变量在定义时就已经在全局数据区分配了内存,因而它是属于。...对于非静态成员变量,我们实例化过程中(构造对象)才在栈区或者堆区为其分配内存,为每个对象生成一个拷贝,所以它是属于对象

1.9K40

为什么1亿用户Keep家「快」公司

近期,国内移动运动应用Keep对外正式宣布注册用户数突破1亿大关,成功晋级移动互联网俱乐部梯队。 ? Keepers突破1亿用户大观 文/黄成甲(微:Alankou) 为什么说Keep家快公司?...艾瑞数据:未来十年健身休闲产业规模将由2015年8000亿增长到2025年3万亿规模。 1「靠谱」创业团队 ——一群90后极客 Keep猿题库从0到1重构。...2012年王宁加入猿题库实习,他带着150个实习生做新项目猿题库高考,从找房子、装修、招聘到管理这150人衣食住行。这段经历不仅使王宁经历了从0到1过程。...事实证明像“小熊快跑”、“全城热练”为代表这一型互联网企业并没有做起来,因为这种模式消灭掉绝大部分健身中心相当份额现金流。Keep真正想做“健身餐”。...这也是工具应用试水电商均遇到难题。以笔者多年电商供应链经验来讲,一家自有品牌电商化之路,自有品牌并不是一种大规模大成交量零售业态,它是一种更关注用户定位精准,强调购买回头率行业。

1.1K50

C++】多态 ⑧ ( 验证指向 虚函数表 vptr 指针 | 对比定义了虚函数和没有定义虚函数大小 )

vptr 指针 是否存在 1、虚函数表与 vptr 指针由来 " 虚函数表 " 由 C++ 编译器 负责 创建 与 维护 , 被 virtual 关键字 修饰 虚函数 , 会自动 被 C++ 编译器...存储到 " 虚函数表 " 中 ; 虚函数表 创建 : 在 中使用 virtual 关键字 声明 虚函数 时 , C++ 编译器 会自动为该类生成 " 虚函数表 " ; 生成虚函数表前提 至少有...虚函数指针 : " 虚函数表 " 存储 " 成员函数指针 " 数据结构 , 一个 函数指针数组 , 数组中元素都是函数指针 , 具体存储都是 指向 虚函数 指针 ; 如果 子类...中定义了 虚函数 virtual void fun(int a) ; 在 Parent2 中定义 普通函数 void fun(int a) ; 使用 sizeof 函数 , 获取这两个大小 ,...p = &c; // 通过父指针调用子类对象 fun 函数 p->fun(1); // 打印 Parent 大小 cout << "sizeof(Parent) : " << sizeof

17540

从零开始学C++之虚继承和虚函数对C++对象内存模型造成影响(对象大小

首先重新回顾一下关于/对象大小计算原则: 大小计算遵循结构体对齐原则 第一个数据成员放在offset为0位置 其它成员对齐至min(sizeof(member),#pragma pack(n)...win32 可选1, 2, 4, 8, 16 linux 32 可选1, 2, 4 大小与数据成员有关与成员函数无关 大小与静态数据成员无关 虚继承对大小影响 虚函数对大小影响...下面通过实例来展示虚继承和虚函数对大小造成影响。...如果派生从多个基继承或者有多个继承分支(从所有根开始算起),而其中若干个继承分支上出现了多态,则派生将从这些分支中每个分支上继承一个vptr,编译器也将为它生成多个vtable,有几个vptr...但如果钻石继承,那么会存在两份虚函数表和两份虚函数表指针。 参考: 《深入探索C++对象模型》 C++ primer 第四版 Effective C++ 3rd C++编程规范

97600

64位平台下,指针自身大小为什么8字节?

为什么指针大小会作为一个知识点呢?...因为后续内存管理内容会涉及一些数据结构,这些数据结构使用到了指针,同时存储指针需要内存空间,所以我们需要了解指针大小,便于我们理解一些设计意图;其次,这也是困扰我一个问题,因为有看见64...为了搞清楚这个问题,我们需要了解两个知识点: 存储单元 CPU总线 什么存储单元? ---- 存储单元存储器(本文指内存)基本单位,每个存储单元8bit,也就是1Byte,如下图所示: ?...所以:64位平台下,一个指针大小8字节。 顺便扩充个问题: 为什么32位平台下,可寻址空间4GB?...,存储单元大小为8bit(1Byte) 所以我们可以得到,32位平台最多可以寻找到2^32个存储单元,再翻译下2^32个存储单元这句话: 2^32个存储单元 == 2^32个1Byte == 2^32Byte

65610

从零开始学C++之对象使用(一):static 成员变量、static 成员函数、对象大小

1)、static成员定义 static成员需要在定义体外进行初始化与定义 (2)、特殊整型static const成员 整型static const成员可以在定义体中初始化,...const int Test::c = 0; //注意:给静态成员变量赋值时,不需要加static修饰符,但要加const (3)、static成员优点: static成员名字作用域中...二、static 成员函数 static成员函数没有隐含this指针 非静态成员函数可以访问静态成员 静态成员函数不可以访问非静态成员(实际上直接访问不可以,间接地访问可以,比如通过指针或引用...endl;     return 0; } 三、/对象大小计算 大小计算遵循前面学过结构体对齐原则(参照这里) 大小与数据成员有关与成员函数无关(空大小1个字节) 大小与静态数据成员无关...虚函数对大小影响(参考这里) 虚继承对大小影响(参考这里) 参考: C++ primer 第四版 Effective C++ 3rd C++编程规范

1.2K00

为什么0xffffffff-1?(计算机对整型存储)

(Integer.MAX_VALUE)); 拿到int最大值,1111111111111111111111111111111,31个1,首位0(代表正数,省略了) 那我们给int最大值+1,会发生什么呢...那我们让他们相连,那int顺序就变成了如下: 我们想想中int原码顺序 这块大家可能会困惑,为什么01111111111111111111111111111111 (第一位为0,后面...31个1,这是最大正数补码) + 1 应该为10000000000000000000000000000000(第一位为1,后面31个0,最小负数补码),应该是-0啊,为什么-2147483648?...现在就需要我们开篇第一句核心精髓了,计算机中存储数值,都是以二进制补码形式存入,正数补码他本身,负数补码反码加一。 还有补码补码原码 我们先看看-0补码是多少?...我们再把上述原码图,升级为补码顺序图: 计算机存储补码顺序 看了上述int补码图,就应该懂了,其实0xffffffff-1

75640
领券