C++ 开关 : case <some constant> - is this allowed?

标签 c++ switch-statement expression constants case

我正在尝试执行以下操作:

    switch(moveDirection){
        case MOVE_DIRECTION_UP:
            //do something
        break;
    }

MOVE_DIRECTION_UP 在哪里:

    const unsigned char MOVE_DIRECTION_UP = 0x0;

编译器报错:MOVE_DIRECTION_UP cannot appear in constant-expression

当然应该允许这样做,因为如果我将 MOVE_DIRECTION_UP 替换为 0x0,它可以正常编译。

感谢任何帮助,谢谢!

最佳答案

如果您使用的是 C++11,则可以将 MOVE_DIRECTION_UP 声明为 constexpr。编译器会将其视为一个常量值,可以作为开关标签使用。

如果你不是,你可以定义一个枚举:

namespace eDirection { enum e {
    UP = 0x0,
    DOWN = 0x1
};}

switch( direction ) {
    case eDirection::UP: ...
};

关于C++ 开关 : case <some constant> - is this allowed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13659323/

相关文章:

c - 此 C 代码的哪一部分缺失或需要更改?

java - 将开关更改为 "if-else"语句

c# - 如何使用 Linq 合并 Select 方法中的表达式

entity-framework - 如何调用 lambda 表达式中的方法在 Entity Framework 中运行?

c++ - 为什么我尝试将按钮连接到 lambda 会失败?

c++ - 在程序中一起使用 If 和 Switch 语句

c# - C++ 等同于 C# OOP if(Boy b is Student)

c# - 为什么我不能将 Expression Body 转换为 MethodCallExpression

c++ - 为什么这个 `std::atomic_thread_fence`有效

c++ - 如何使用 XF86VidModeSetGamma() 更改第二台显示器的 Gamma 值?