C++作用域为类的常量、域内枚举(C++ primer,P371)

除了#define,有三种在类内声明常量的方式:

  • const声明常量;
  • 类内声明一个枚举;
  • 指定底层实现(可以用short之类实现枚举);

const声明常量

const声明的常量在每个对象中都会存放一个备份(这是其缺陷);
c++11之前,const声明常量时不能初始化,因为类只是描述对象的形式,没有创建对象;此时给出初始化的值,将无法存放。所以需要用初始化列表进行初始化。
c++11之后,没这个限制了。

enum枚举常量

在类内声明一个枚举类型,枚举常量的作用域将是整个类,且枚举类型存放于常量区,不占用对象的内存!!!
可以声明一个没有枚举名的枚举类型;

域内枚举

域内枚举两个特性:

  • 消除同名冲突;
  • 禁止隐式转换成整型;

消除冲突:
常规情况下,如果声明了下面两个枚举,将会出现冲突(常量名冲突)

enum size_egg {S, M, L, J};
enum size_Tshirt {S, M, L, XL};

现在可以声明域内枚举,消除这种冲突(使用 class / struct 关键字)

enum class size_egg {S, M, L, J};
enum class size_Tshirt {S, M, L, XL};

禁止隐式转换成整型:

可以显式的用类型转换(int)转换成整型;

改变枚举底层实现:
(这个功能在树上看到的,但是我实际没测试成果,不知道为什么)

class:short

enum class : short size_egg {S, M, L, J};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值