zoukankan      html  css  js  c++  java
  • c++学习过程

    1、(1)enum

    enum是C++中的枚举类型,以一系列字符串,来表示整型数字,起到更方便阅读维护代码的效果。

    1 enum的定义:

    enum 的定义形式如下:

    1
    2
    3
    4
    5
    6
    7
    enum enum_name
    {
        enum_value1,
        enum_value2,
        ...
        enum_valuen
    };搜索

    如果没有定义enum变量的需求,enum_name可以省略。

    在以上形式下,第一个值,enum_value1, 默认值为0,以下各条分别为上一条加一。

    如果要改变enum的第一个值,或enum各个项值不连续,可以写作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    enum enum_name
    {
        enum_value1= -100,
        enum_value2,
        ...
        enum_valuem = 1234,
        enum_valuem1,
        ...
        enum_valuen
    };

    其中显式赋值的enum项,实际值就是显式赋值的值。其它项仍遵从上一项加一的原则。

    于是在这个例子中,enum_value2 = -99, enum_valuem1 = 1235。

    2 enum 变量的定义:

    定义一个变量的格式为

    enum enum_type var = init_value;

    定义一个enum_type为类型的变量var, 并初始化为init_value. 其中=init_value部分可以省略。

    3 enum项的使用。

    enum各个项使用方法类似于无参宏定义。在需要某值的地方,引用对应项即可。

    var = enum_value1;

    枚举是定义一种类型,你可以用这个类型名来定义变量的,比如说你定义的enmu x 你后面直接可以用x来定义变量了,如x a;这样定义的结果就是a的取值只能取A,B,C,,而你里面的0,1,2只是给ABC指定序号而已,和宏定义完全两回事。

    要了解enum class的出现,则需要首先了解enum,方才知道为何有这东西。那么Meyers首先举出一个例子来阐述:
    enum Color {black, white, red};
    
    auto white = false; // error
    

    其缘由在于black, white, red等并没有属于Color这个枚举体的作用域,而是与Color在一个作用域中。而为何会这样呢?若再追踪于到C,追踪到enum没出现之前,enum的功能则需要需要一系列的#define来完成,而enum则完成了这一系列#define的“打包收集”,所以我想你可以这样来理解enum,即“解包”

    #define black 0
    #define white 1
    #define red 2
    
    auto white = false
    

    也正是如此,对于两个不一样的枚举体,它们即使枚举体的名字不同,里面的内容也不能重名。如:

    enum Direction {TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT};
    
    // error!
    enum WindowsCorner {TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT};
    

    这对于我用户来说,这是不可理解的,因为在我心中,WindowsCorner的TOP_LEFT和Direction的TOP_LEFT是不同的。所以,在完成C的#define -> enum的进化后,那么如何更进一步的约束enum,即对于不同的枚举体有更好的类型安全与约束,就成为了C++11的任务,而C++11的答案则是enum class。

    而在进入C++11 enum class的时候,我想再稍微提一下C和C++在enum的不同。在一些C代码中,会有这样的用法:

    enum Direction {TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT};
    
    int main()
    {
      enum Direction d = 1;
    }
    

    C是允许的,而C++是不允许的,C++只允许Direction d 由枚举体的TOP_RIGHT等值或者另外一个枚举体变量赋值,所以你可以认为C++的enum比C的enum更加类型安全。

    那么收回这个小注意点的思绪,回到C++11的enum class。enum class的用法非常简单,如上文Meyers的例子:

    enum class Color {black, white, red};
    
    auto white = false; // OK!
    

    引入了这样的语法后,black, white, red等则隶属于Color这个enum class的作用域,那么下面的auto white的white则与enum class的white是不同的作用域,所以是OK的了。而我们的Direction和WindowsCorner也是可以有同名的TOP_LEFT等值了。

    参考文献:https://blog.csdn.net/wangqing_12345/article/details/52472101

  • 相关阅读:
    多个tab切换demo
    react添加和删除定时器的地方
    编写C语言的两种方法----Visual Studio/CodeBlocks
    C++学习笔记---引用的本质
    C++学习笔记---指针
    C++学习笔记---数据类型
    博客园皮肤SimpleMemory深色风格皮肤
    SQL DELETE语句如何让表使用别名的方法
    Asp.Net实现局部刷新,ScriptManager和UpdatePanel控件的使用
    由于可能不会将凭据发送到远程计算机,因此将不会进行连接。若要获得协助,请与您的系统管理员联系。(转)
  • 原文地址:https://www.cnblogs.com/fanru5161/p/9003813.html
Copyright © 2011-2022 走看看