【问题标题】:Constant and enum [closed]常量和枚举
【发布时间】:2015-08-04 16:56:00
【问题描述】:

什么时候可以使用常量和枚举?彼此有没有优势。

据我所知,编译器将两者都放入符号表中,这意味着两种方式都经过优化。

【问题讨论】:

    标签: c++ enums constants compiler-optimization


    【解决方案1】:

    常量可以是任何类型(int、float、struct 等)。

    当您有一个相互排斥的项目列表时,枚举是很好的,并且不特别关心它们具有什么价值,只要它们是相互排斥的。枚举只是整数,所以不能有浮点枚举。

    【讨论】:

      【解决方案2】:

      差异实际上归结为程序员的可读性以及类型安全性。考虑:

      enum class Months : unsigned short {
          JAN = 1,
          FEB,
          MAR,
          .
          .
          .
          DEC
      }; // compiler fills in the numbers for you.
      
      typedef const int Month;
      static Month JAN = 1;
      static Month FEB = 2;
      .
      .
      .
      static Month DEC = 12;
      

      请记住,常量也可以有任何类型,而您的枚举类型默认为 int 类型(尽管可以在 C++11 中更改)。

      【讨论】:

      • 呃,全大写的常量。
      • 在C++11中可以指定枚举的类型,但仍然必须是整数类型;浮点类型、结构和其他枚举不允许作为枚举类型。
      【解决方案3】:

      如果使用的常量是 int,那么就编译器而言,它们实际上是相同的。然而,正如 user3470630 指出的那样,常量可以是任何类型,不像枚举总是整数。

      但是,枚举在代码可读性方面可能具有优势,因为它们允许您定义一组相关且互斥的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-21
        • 2011-07-09
        • 1970-01-01
        • 1970-01-01
        • 2010-10-11
        • 2020-11-17
        • 2020-04-20
        • 2012-05-13
        相关资源
        最近更新 更多