【发布时间】:2016-11-17 08:53:33
【问题描述】:
我有一个类,它的成员是在这个类中声明的枚举:
#include<iostream>
class test
{
public:
enum TYPE{MAN, WOMAN};
TYPE type;
};
int main()
{
test x;
if(x.type == test::MAN) std::cout<<"MAN"<<std::endl;
if(x.type == test::WOMAN) std::cout<<"WOMAN"<<std::endl;
std::cout<<"ok"<<std::endl;
return 0;
}
我know,如果枚举在命名空间范围内声明,它的默认值为 0,而当它在本地声明时,它没有任何默认值,这会导致未定义的行为。
我的问题是:如果我有一个属于某个类的枚举怎么办?它也是未定义的行为吗?
我测试了上面的代码,x.type 既不是 MAN 也不是 WOMAN。但是,我只为一个编译器和一个操作系统完成了它。我对更一般的答案感兴趣。我在其他任何地方都没有找到有关此问题的任何信息。
Edit1:引用这个不确定的值会导致分段错误吗?
Edit2:我知道这不是一个设计良好的类——它不是我的,我正在尝试调试它。所以告诉我我可以默认初始化对象并不能解决我的问题。请把它当作一个理论问题。
【问题讨论】:
-
这与枚举完全无关。
struct X { int n; };会有完全相同的问题。 -
你应该给你的
type成员一个大括号或相等的初始化器,或者给你的test类一个默认构造函数,将type初始化为一个默认值 -
这不是关于枚举,而是关于读取一个未初始化的变量。 UB。
标签: c++ enums undefined undefined-behavior