在 switch 语句中使用 const int 变量
Posted
技术标签:
【中文标题】在 switch 语句中使用 const int 变量【英文标题】:Using const int variable in switch statement 【发布时间】:2013-04-30 22:53:05 【问题描述】:我正在使用带有 -std=c++11 标志的 gcc。在我的类定义中,我有以下内容:
private:
const int January = 1,
February = 2,
March = 3,
...
在我的实现中,我有一个 switch 语句。
switch (currentMonth)
case January:
returnString = "January";
break;
case February:
returnString = "February";
break;
case March:
returnString = "March";
break;
...
这似乎应该有效,因为月份是恒定的;但是,gcc 给了我
calendar.cpp:116:12: error: ‘this’ is not a constant expression
在 switch 语句的每种情况下..为什么这是错误的?
【问题讨论】:
您的示例中的哪一行是116
,如果分配,它是一个吗?还是switch
本身的案例?
我将帖子编辑得更清楚
【参考方案1】:
非静态类成员不是常量表达式。试试这个:
static constexpr int January = 1;
【讨论】:
+1,大概就是这个了。请注意,对于与 c++03 兼容的内容,static const int January = 1;
也可以使用。
我不熟悉static
这个关键字,但我的印象是使用new
会创建一个静态对象;那么这是否意味着这与使用new
相同?这意味着在我的析构函数中,我需要对其中的每一个调用 delete ?还是完全不同?
@kennycoc:不,使用new
不会创建静态对象,你从哪里听到的?
我正在通过复数视觉学习 C++。我确定我误会了。【参考方案2】:
试试这个:
enum
January = 1,
February = 2
...
;
【讨论】:
更好的是,尝试一些可以编译的东西。enum int
应该只是 enum
(或者,在 C++11 中,如果出于某种原因特别希望底层类型为 int
,则可能是 enum : int
),并且它需要声明后的分号。
如果您有浏览器和互联网连接,那么您可以访问编译器。很多,其实。例如:ideone.com
@BenjaminLindley 很酷,谢谢。我只知道 jsfiddle 和 repl.it
一些更新给那些将要查看的人:使用enum class
而不是enum
,它会为您提供类型检查以上是关于在 switch 语句中使用 const int 变量的主要内容,如果未能解决你的问题,请参考以下文章
csharp Switch语句就像流线条件一样。当您想要将单个变量与一系列const进行比较时,它们非常有用
switch语句能否作用在byte,long,string上