相关疑难解决方法(0)

如果你为枚举类static_cast无效值会发生什么?

考虑一下这个C++ 11代码:

enum class Color : char { red = 0x1, yellow = 0x2 }
// ...
char *data = ReadFile();
Color color = static_cast<Color>(data[0]);
Run Code Online (Sandbox Code Playgroud)

假设数据[0]实际上是100.根据标准设置的颜色是什么?特别是如果我以后做的话

switch (color) {
    // ... red and yellow cases omitted
    default:
        // handle error
        break;
}
Run Code Online (Sandbox Code Playgroud)

标准是否保证会触发默认值?如果没有,在这里检查错误的正确,最有效,最优雅的方法是什么?

编辑:

作为奖励,该标准是否对此有任何保证,但是用简单的枚举?

c++ c++11

136
推荐指数
1
解决办法
3万
查看次数

强制枚举值不正确?

我在C++的枚举中遇到了一些不寻常的(至少对我而言)行为.我在Visual Studio 2008和g ++版本4.4.3中尝试了以下内容

#include <iostream>
using namespace std;

enum testEnum
{
    // no zero enum
    one = 1,
    two = 2,
    three = 3
};

int main(int argc, char *argv[])
{
    testEnum e;  // undefined value (may be zero, but thats just luck)
    cout << "Uninitialized enum e = " << e << endl;

    /*
        testEnum e2(0);  // error converting from int to enum
    */

    testEnum e3(testEnum(0)); // forces zero !?!!?!?
    cout << "zero enum e3 = " << …
Run Code Online (Sandbox Code Playgroud)

c++ enums

6
推荐指数
2
解决办法
9671
查看次数

标签 统计

c++ ×2

c++11 ×1

enums ×1