• C++ 关键字 enum


    转自:https://blog.csdn.net/cppwork/article/details/18814315

    C++ 关键字 enum。 枚举

    1.  概念

    我们经常需要为某些属性定义一组可选择的值,例如:颜色(赤橙黄绿青蓝紫)、性别(男女)、星期(一二三四五六七),这些属性的值是能够被一一列举出来的,通常用常量值关联的方法来记录这些属性组的值,我们可能会这样编写代码:

    const int male = 0;

    const int female = 1;

    虽然这种方法也能奏效,但是它有个明显的缺点:没有指出这些值是相关联的。枚举提供了一种替代的方法,不但定义了整数常量集,而且还把它们聚集成组。如果一个变量只有几种可能的值,则可以定义为枚举(enumeration)类型,所谓“枚举”就是指把可能的值一一列举出来,变量的值只能限于列举出来的值得范围内。

    2.  使用

    定义和初始化枚举:枚举的定义包括关键字enum,其后是一个可选的枚举类型名,和一个用花括号括起来、用逗号分开的枚举成员列表。

    #include <iostream>
    using namespace std;
    
    enum Weekday
    {
    	sun, //0
    	mon, //1
    	tue, //2
    	wed, //3
    	thu, //4
    	fri, //5
    	sat  //6 
    };
    
    int main()
    {
    	Weekday day = tue;
    
    	switch(day)
    	{
    	case mon:
    	case tue:
    	case wed:
    	case thu:
    	case fri:
    		{
    			cout<<"Go to work!"<<endl;
    		}
    		break;
    	case sat:
    	case sun:
    		{
    			cout<<"Entertainment!"<<endl;
    		}
    		break;
    	}
    
    	return 0;
    }

    枚举名是可选的,所以也可以不声明有名字的枚举类型,而直接定义枚举变量,例如:

    enum { sun, mon, tue, wed, thu, fri, sat } workday,weekend;

    默认地,第一个枚举成员赋值为 0,后面的每个枚举成员赋的值比前面的大 1。也可以为一个或多个枚举成员提供初始值,但用来初始化枚举成员的值必须是一个常量表达式。例如,可以定义下列枚举类型:

    // shape is 1, sphere is 2, cylinder is 3, polygon is 4
    enum Forms 
    {
    	shape = 1, 
    	sphere, 
    	cylinder, 
    	polygon
    };

    在 枚举类型 Forms 中,显式将 shape 赋值为 1,其他枚举成员隐式初始化:sphere 初始化为 2,cylinder 初始化为 3,polygon 初始化为 4。 枚举成员值可以是不唯一的:

    // point2d is 2, point2w is 3, point3d is 3, point3w is 4
    enum Points 
    { 
    	point2d = 2, 
    	point2w,
    	point3d = 3, 
    	point3w 
    };

    上面的代码中,枚举成员 point2d 显式初始化为 2,下一个枚举成员 point2w 默认初始化,即它的值比前一枚举成员的值大 1,因此 point2w 初始化为 3,枚举成员 point3d 显式初始化为 3,一样,point3w 默认初始化,结果为 4。

    每个 enum 都定义了一种新的类型。和其他类型一样,可以定义和初始化枚举类型的对象,也可以以不同的方式使用这些对象。枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行:

     

         Points pt3d = point3d; //  ok: point3d is a Points enumerator
         Points pt2w = 3;       //  error: pt2w initialized with int
         pt2w = polygon;        //  error: polygon is not a Points enumerator
         pt2w = pt3d;           //  ok: both are objects of Points enum type

    注意把 3 赋给 Points 对象是非法的,即使 3 与一个 Points 枚举成员相关联

    3.  枚举大小

    对于枚举大小,通常枚举和 int 的大小是一样的:

    sizeof(Weekday) == sizeof(day) == sizeof(int)

    但是枚举的大小也不一定就和 int 一样,详细可参看 C++标准文档(ISO14882) 中对于枚举的描述

    本文参考书目:《C++ Primer》

  • 相关阅读:
    Java内存管理的小技巧
    Java 数组
    cmd命令大全
    wget 使用技巧
    Excellent Eclipse Plugin
    A Tutorial on Clustering Algorithms
    KMeans 算法
    Windowtester Pro Automation test environment Setup using VM Ware Client by Remote Desktop Connection
    POP3、SMTP、IMAP、Exchange
    LeetCode Validate Binary Search Tree
  • 原文地址:https://www.cnblogs.com/MCSFX/p/10342286.html
Copyright © 2020-2023  润新知