zoukankan      html  css  js  c++  java
  • C++ 作用域内枚举

    ——传统的枚举存在一些问题,其中之一是两个枚举类型定义中的枚举量可能发生冲突。

    enum egg {Small, Medium, Large, Jumbo};
    enum t_shirt {Small, Medium, Large, Xlarge};
    

      这将无法通过编译(egg Small和t_shirt Small发生冲突)

    解决办法(新枚举):

    C++11提供了一种新枚举,其枚举量的作用域为类:

    enum class egg {Small, Medium, Large, Jumbo};
    eum class t_shirt {Small, Medium, Large, Xlarge};
    
    • 可使用关键字struct代替class
    • 使用时需使用枚举名来限定枚举量:
      egg choice = egg::Large;    // the Large enumerator of the egg enum
      t_shirt Floyd = t_shirt::Large;    // the Large enumerator of the t_shirt enum
      
    • C++11提高了作用域内枚举的类型安全:
      • 有时,常规枚举将自动转换为整型,如将其赋给int变量或用于比较表达式时,但作用域内枚举不能隐式地转换为整型:
        enum egg_old {Small, Medium, Large, Jumbo};    // unscoped
        enum class t_shirt {Small, Medium, Large, Xlarge};    // scoped
        egg_old one = Medium;    // unscoped
        t_shirt rolf = t_shirt::Large;    // scoped
        int king = one;    // implicit type conversion ofr unscoped
        int ring = rolf;    // not allowed, no implicit type conversion
        if (king < Jumbo)    // allowed
            std::cout<<"Jumbo converted to int before comparison.
        ";
        if (king < t_shirt::Medium)    // not allowed
            std::cout<<"Not allowed: < not defined for scoped enum.
        ";
        

          但在必要时,可显示类型转换:

        int Frodo = int(t_shirt::Small);    // Frodo set to 0
        

          

  • 相关阅读:
    allure2生成html报告
    H5如何测试?
    请描述什么是性能测试、什么是负载测试、什么是压力测试?
    Web/App端自动化测试对比
    如果给你一台电梯,请问你如何测试它
    PC、APP、H5三端测试的相同与不同
    App测试工具选择
    app测试和web测试的区别
    unittest单元测试框架详解
    Jmeter之逻辑控制器(Logic Controller)
  • 原文地址:https://www.cnblogs.com/suui90/p/13039563.html
Copyright © 2011-2022 走看看