C++枚举类型

限定作用域的枚举类型

C++11引入了限定作用域的枚举类型,与普通枚举类型不同,限定作用域的枚举类型的成员名字在作用域外不可访问,所以这种枚举类型的名字可以和作用域外的名字重复。

enum class Color1{red,yellow,green};//限定作用域的枚举类型
enum struct Color2{ red, yellow, green };//限定作用域的枚举类型
enum Color3 { red, yellow, green };//不限定作用域的枚举类型
enum Color4 { red, yellow, green };//错误,重复定义了red, yellow, green

int main(void)
{

	Color1 color1 = Color1::red;
	Color2 color2 = Color2::red;
	Color3 color3 =red;
	system("pause");
	return 0;
}

枚举类型与整型

默认情况下,枚举成员值从0开始,依次加1,不过我们也可以为一个或几个枚举成员指定专门的值,没有显示提供初始值的枚举成员值等于之前枚举成员值加1。

enum Color { red=2, yellow, green };

int main(void)
{
	std::cout << red << std::endl;//2
	std::cout << yellow << std::endl;//3
	std::cout << green << std::endl;//4
	system("pause");
	return 0;
}

不限定作用域的枚举类型能自动转换为整型,限定作用域的枚举类型不会进行隐式转换。

enum Color1 { red=2, yellow, green };
enum class Color2 { red = 2, yellow, green };
int main(void)
{
	int i = red;
	int j = Color2::red;//错误
	system("pause");
	return 0;
}

默认情况下限定作用域的枚举成员类型是int,不限定作用域的枚举类型则不存在默认类型,我们可以使用冒号更改枚举成员的整数类型。

enum Color1:long long { red=2, yellow, green };
enum class Color2 { red = 2, yellow, green };
int main(void)
{
	auto color1 = red;
	auto color2 = Color2::red;
	std::cout << sizeof(color1) << std::endl;//8
	std::cout << sizeof(color2) << std::endl;//4
	system("pause");
	return 0;
}

尽管枚举对象能够转换为整型,但是不能直接将整型值传给枚举形参。

enum Color {red};

void printColor(Color color)
{
	std::cout << color << std::endl;
}

int main(void)
{
	printColor(0);//错误
	printColor(red);
	system("pause");
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值