在switch语句中使用const int变量

iCo*_*ime 9 c++ gcc c++11

我正在使用带有-std = c ++ 11标志的gcc.在我的课程定义中,我有以下内容:

private:
   const int   January     = 1,
               February    = 2,
               March       = 3,
               ...
Run Code Online (Sandbox Code Playgroud)

在我的实现中,我有一个switch语句.

switch (currentMonth)
{
   case January:
      returnString = "January";
      break;
   case February:
      returnString = "February";
      break;
   case March:
      returnString = "March";
      break;
   ...
Run Code Online (Sandbox Code Playgroud)

这似乎应该有效,因为月份是不变的; 但是,gcc给了我

calendar.cpp:116:12: error: ‘this’ is not a constant expression
Run Code Online (Sandbox Code Playgroud)

在switch语句的每个案例上.为什么这是错的?

Ker*_* SB 13

非静态类成员不是常量表达式.试试这个:

static constexpr int January = 1;
Run Code Online (Sandbox Code Playgroud)

  • @kennycoc:不,使用`new`不会创建静态对象,你在哪里听到的? (6认同)