C++ 开关:情况<一些常数> - 这是允许的吗?
C++ Switch: case <some constant> - is this allowed?
我正在尝试执行以下操作:
switch(moveDirection){
case MOVE_DIRECTION_UP:
//do something
break;
}
MOVE_DIRECTION_UP在哪里:
const unsigned char MOVE_DIRECTION_UP = 0x0;
编译器给出错误:MOVE_DIRECTION_UP不能出现在常量表达式中
当然,这应该是允许的,因为如果我用0x0替换MOVE_DIRECTION_UP,它可以很好地编译。
任何帮助不胜感激,谢谢!
如果您正在使用 C++11,则可以将MOVE_DIRECTION_UP
声明为 constexpr
。编译器会将其视为可用作开关标签的常量值。
如果不是,则可以定义枚举:
namespace eDirection { enum e {
UP = 0x0,
DOWN = 0x1
};}
switch( direction ) {
case eDirection::UP: ...
};
这
在C++中是允许的。您的代码是正确的。const
变量可以在常量表达式中使用。
您确定要构建的是C++源文件而不是 C 文件吗?在 C 中,代码无效(const
变量不能在常量表达式中使用。
这似乎是编译器错误。
在C++98:
5.19 常量表达式
。
一个整数常量表达式只能涉及文字(2.13),枚举器、常量变量或静态变量初始化的整型或枚举类型的数据成员常量表达式 (8.5)
在第 C++11 中:
5.19 常量表达式
。
2 条件表达式是核心常量表达式,除非它涉及以下之一作为潜在评估的子表达式
。
— 左值到右值的转换 (4.1),除非它适用于
— 整数或枚举类型的 gl值,指的是非易失性具有前面初始化的 const 对象,使用常量表达式,或
您没有提供演示问题的实际程序,所以我将使用水晶球。 您转发声明了您的 const,其值在交换机上不直接可见。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 函数中堆分配的效果与缺少堆分配的情况
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 为什么在某些情况下不写入此文件?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- C++ 开关:情况<一些常数> - 这是允许的吗?
- 在这种特殊情况下,应该传递指针或非常数引用吗
- 如何在不调用非常数方法的情况下更改私有成员