gpt4 book ai didi

c++ - 为什么我不能在 switch/case 中使用 unsigned short?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:48 25 4
gpt4 key购买 nike

我在 ClsA 中有两个静态成员声明,​​如下所示:

class ClsA {
public:
static unsigned short m_var1;
static unsigned short m_var2;
};

unsigned short ClsA::m_var1 = 1001;
unsigned short ClsA::m_var2 = 1002;

ClsB 中,我像这样使用来自 ClsA 的静态成员声明:

unsigned short var1; // assume var1 is declare/use some where in the code.

switch( var1 ) {
case ClsA::m_var1: // Error: cannot appear in a constant-expression
break;

case ClsB::m_var2: // Error: cannot appear in a constant-expression
break;
}

如果我在 switch 语句中使用它,为什么会出现错误?如果我在 if 语句中使用它,则没有错误。

最佳答案

C++ 要求case 有一个constant-expression 作为它的参数。那是什么意思?这意味着在常量表达式中唯一合法的操作数是:

  • 文字
  • 枚举常量
  • 声明为 const 并使用常量表达式初始化的值
  • sizeof 表达式

在您的情况下,如果您将静态成员声明为 const,并在使用整数常量表达式声明时初始化它们,则可以在 switch-case 语句中使用它们。例如,

class ClsA {
public:
static const unsigned short m_var1 = 13;
static const unsigned short m_var2 = 42;
};

另一方面,如果您坚持切换变量以避免多个 if-else if 语句,我建议使用跳转表(它也称为查找表)。

关于c++ - 为什么我不能在 switch/case 中使用 unsigned short?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com