草庐IT

c++ - 枚举从原始类型继承

来自this等问题和this,我的印象是从原始类型继承会导致编译器错误。但是,以下代码编译并在Ideone上产生预期的输出。.#includeenumclassTest:unsignedshortint{TEST,TEST2,TEST3,TEST4};intmain(){//yourcodegoeshereTestans=Test::TEST3;if(ans==Test::TEST3){std::coutclass也是enum的事实是否会改变前两个问答中的答案?这是标准明确定义的行为吗? 最佳答案 这并不意味着继承,而是选择枚举的底

c++ - 如何在 C++ 中创建原子枚举?

类atomic包含atomicversionsofmanydifferentvariabletypes.但是,它不包含原子枚举类型。有没有办法使用原子枚举或自己制作?据我所知,我唯一的选择是要么不使用枚举,要么使用互斥体/信号量来保护它们。注意:这个bugreport我发现提到“std::atomicenumsupport”,但我没有看到C++标准中提到原子枚举类型,所以我不确定它指的是什么。 最佳答案 你可以像这样创建一个原子枚举:#includeenumDecision{stay,flee,dance};std::atomice

c++ - 如何在 C++ 中创建原子枚举?

类atomic包含atomicversionsofmanydifferentvariabletypes.但是,它不包含原子枚举类型。有没有办法使用原子枚举或自己制作?据我所知,我唯一的选择是要么不使用枚举,要么使用互斥体/信号量来保护它们。注意:这个bugreport我发现提到“std::atomicenumsupport”,但我没有看到C++标准中提到原子枚举类型,所以我不确定它指的是什么。 最佳答案 你可以像这样创建一个原子枚举:#includeenumDecision{stay,flee,dance};std::atomice

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?

enumclassE{};intmain(){Ee1{0};//okEe2=0;//notok//error:cannotinitializeavariableof//type'E'withanrvalueoftype'int'}我的编译器是clang4.0,带有选项-std=c++1z。预计Ee2=0;不行,因为E是强类型的。不过,让我吃惊的是Ee1{0};应该没问题。为什么没有static_cast可以用整数初始化强类型枚举? 最佳答案 看reference自C++17起允许使用列表初始化器:Bothscopedenumerat

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?

enumclassE{};intmain(){Ee1{0};//okEe2=0;//notok//error:cannotinitializeavariableof//type'E'withanrvalueoftype'int'}我的编译器是clang4.0,带有选项-std=c++1z。预计Ee2=0;不行,因为E是强类型的。不过,让我吃惊的是Ee1{0};应该没问题。为什么没有static_cast可以用整数初始化强类型枚举? 最佳答案 看reference自C++17起允许使用列表初始化器:Bothscopedenumerat

c++ - GCC 打开枚举,保留缺少的警告但使用默认值

使用GCC,如果您在enum值上switch并且其中一个枚举缺少case语句,则会发出警告。当您添加default项时,将不再发出警告,这在一般情况下是有意义的。有没有办法使用default语句,如果没有覆盖所有enum值,仍然会发出警告?由于我的函数可能处理不纯的输入,我想涵盖通用情况,但仍然会收到有关缺少枚举情况的编译器警告。目前我最终在switch语句之后分配了一个默认值。 最佳答案 -Wswitch-enum,但不幸的是,只有最新版本支持此功能。(您当然可以通过在开关外使用goto并省略默认值来模拟您想要的行为,但我强烈建议

c++ - GCC 打开枚举,保留缺少的警告但使用默认值

使用GCC,如果您在enum值上switch并且其中一个枚举缺少case语句,则会发出警告。当您添加default项时,将不再发出警告,这在一般情况下是有意义的。有没有办法使用default语句,如果没有覆盖所有enum值,仍然会发出警告?由于我的函数可能处理不纯的输入,我想涵盖通用情况,但仍然会收到有关缺少枚举情况的编译器警告。目前我最终在switch语句之后分配了一个默认值。 最佳答案 -Wswitch-enum,但不幸的是,只有最新版本支持此功能。(您当然可以通过在开关外使用goto并省略默认值来模拟您想要的行为,但我强烈建议

c++ - 在单独的枚举类型中重用枚举值

有没有办法在不同的类型中重用相同的枚举值?我希望能够做到以下几点:enumDeviceState{UNKNOWN,ACTIVE,DISABLED,NOTPRESENT,UNPLUGGED};enumDeviceType{UNKNOWN,PLAYBACK,RECORDING};int_tmain(intargc,_TCHAR*argv[]){DeviceStatedeviceState=DeviceState::UNKNOWN;DeviceTypedeviceType=DeviceType::UNKNOWN;return0;}这对我来说很有意义,但对C++编译器没有意义——它提示:err

c++ - 在单独的枚举类型中重用枚举值

有没有办法在不同的类型中重用相同的枚举值?我希望能够做到以下几点:enumDeviceState{UNKNOWN,ACTIVE,DISABLED,NOTPRESENT,UNPLUGGED};enumDeviceType{UNKNOWN,PLAYBACK,RECORDING};int_tmain(intargc,_TCHAR*argv[]){DeviceStatedeviceState=DeviceState::UNKNOWN;DeviceTypedeviceType=DeviceType::UNKNOWN;return0;}这对我来说很有意义,但对C++编译器没有意义——它提示:err

c++ - C++中枚举的字符串

有没有办法将文本文件中的字符串与枚举值相关联?问题是:我有一些枚举值作为字符串存储在一个文本文件中,我在满足某些条件时即时读取这些值...现在我想将读取的值分配给一个枚举。最有效的方法是什么?它不需要是最简单的方法。 最佳答案 您可以设置一个可以反复使用的map:templateclassEnumParser{mapenumMap;public:EnumParser(){};TParseSomeEnum(conststring&value){map::const_iteratoriValue=enumMap.find(value);