相关疑难解决方法(0)

如何在C++中使用枚举作为标志?

enums作为标志处理可以在C#中通过[Flags]属性很好地工作,但是在C++中执行此操作的最佳方法是什么?

例如,我想写:

enum AnimalFlags
{
    HasClaws = 1,
    CanFly =2,
    EatsFish = 4,
    Endangered = 8
};

seahawk.flags = CanFly | EatsFish | Endangered;
Run Code Online (Sandbox Code Playgroud)

但是,我收到关于int/ enum转换的编译器错误.是否有更好的表达方式而不仅仅是直接的铸造?优选地,我不想依赖来自第三方库的构造,例如boost或Qt.

编辑:如答案中所示,我可以通过声明seahawk.flags为避免编译器错误int.但是,我想有一些机制来强制执行类型安全,所以有人不能写seahawk.flags = HasMaximizeButton.

c++ enums

171
推荐指数
13
解决办法
13万
查看次数

为什么10 ^ 1是11?

我目前正在学习C++.我试图使用表达式计算整数的幂:

val=10^1;
Run Code Online (Sandbox Code Playgroud)

而不是预期的答案10,结果是11.我已经通过使用powmath.h库的函数解决了这个问题,但我想知道为什么这个语句给了我错误的结果.

c++ math caret

12
推荐指数
3
解决办法
1991
查看次数

C++检查枚举标志

在我的一个类中,我有一个存储一组枚举标志的整数,如下所示:

enum AttackFlags
{
    Contact = 1,                        //Move connects with target
    Projectile = 2,                         //Attack is projectile based
    Unblockable = 4,                        //Attack can not be blocked
    UncounterableLv1 = 8,                   //Attack can't be countered except by extreme counter attack skills/status effects
    UncounterableLv2 = 16,                  //Attack can not be countered
    Flinches = 32,                          //Has a chance to stun the enemy, pushing back their next turn
    Unreflectable = 64,                     //Attack penetrates reflect. Only checked for Magic attacks
    IgnoreDefenderStatusEffects = 128,      //Ignores active status …
Run Code Online (Sandbox Code Playgroud)

c++ enums

3
推荐指数
2
解决办法
7220
查看次数

标签 统计

c++ ×3

enums ×2

caret ×1

math ×1