草庐IT

c++在一个函数参数中使用按位或 "|"的多个枚举

我最近遇到了一些可以像这样传递多个枚举的函数:myFunction(One|Two);因为我认为这是一种非常优雅的方式,所以我尝试自己实现类似的东西:voidmyFunction(int_a){switch(_a){caseOne:cout现在如果我尝试用One|调用函数第二,我希望两个switchcase都被调用。我不太擅长二元运算符,所以我真的不知道该怎么做。任何想法都会很棒!谢谢! 最佳答案 为此你必须像这样制作枚举:enumSTATE{STATE_A=1,STATE_B=2,STATE_C=4};即枚举元素值应为2的幂,以选

c++ - 为什么我应该更喜欢类中的 static constexpr int 而不是类级整数常量的枚举?

C++17更新:staticconstexpr变量是隐式内联,因此不需要外部定义。原始问题:假设我有一个常量列表,例如structCls{staticconstexprintN=32;staticconstexprintM=64;};这当然建议我为这些添加定义以避免可能发生的ODR使用问题,因此我需要:constexprintCls::N;constexprintCls::M;为什么应该我更喜欢这个structCls{enum:int{N=32,M=64};};这让我免于ODR使用的麻烦,因为N和M更真实地只是常量,而不是对象本身(如果这是标题,那就更重要了-only)并且更短。我可以

c++ - 强枚举 typedef : clang bug or c++11 standard uncertainty?

对于这样的代码:typedefenumFooEnum:intFooEnum;enumFooEnum:int{A=1,B};clang(linux/7.0.0)报告没有错误[-c-std=c++11-pedantic],但是gcc(linux/8.2.1)不编译它:g++-c-std=c++11-pedantictest2.cpptest2.cpp:1:28:error:expected';'or'{'before'FooEnum'typedefenumFooEnum:intFooEnum;^~~~~~~test2.cpp:1:28:error:expectedclass-keybefo

c++ - 在创建 C++ 枚举和依赖数据结构时如何避免重复自己?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Enumtostring:returntheenumintegervalueifinvalid/notfound简而言之,我的(工作)定义代码是这样的:enumGadget{First,Second,};constchar*gadget_debug_names[]={"First","Second",//note:stringsaresameasenumtokenshere,butbonuspointsif//theycanoptionallybegivendifferentvalues};但是,如果信息位于

c++枚举并使用它们从用户输入

我的代码中有一个枚举,如下所示:enumStatus{In-Active,Active};。状态对象作为参数传递给Person对象,因此我希望用户输入Active或In-Active并将它们保存在Status变量中。我怎样才能做到这一点?我一开始尝试过,但没有用。这是我的代码:#includeusingnamespacestd;enumStatus{InActive,Active};classPerson{private:stringname;intage;Statusstatus;public:Person(conststring&_name,constint_age,constSt

c++ - 我应该如何检查基础类型值是否为枚举值?

设I是某种整型。现在假设我有一个enumclassmy_enum_class:I,其值可能不连续。现在我得到了一些I值。如何检查它是否是my_enum_class中枚举的值?对asimilarquestion的回答(对于C语言)假设值是连续的,并且可以添加一个“虚拟”上限值,并检查0和该值之间的范围;这与我的情况无关。还有其他方法吗? 最佳答案 目前没有办法做到这一点。有反射(reflection)提案可能会进入c++20和/或c++23让你迭代(在编译时,因此在运行时)枚举中的枚举值。使用它检查会相对容易。有时人们会进行手动枚举反

c++ - 枚举转发声明

这个问题在这里已经有了答案:ForwarddeclaringanenuminC++(19个回答)关闭9年前。我正在尝试正确使用枚举的前向声明。因此,我搜索了Internet,但找不到有用的东西。我在标题中使用它://ForwarddeclarationenummyEnumProcessState;然后我在结构中使用这个枚举:structmyStruct{[...]myEnumProcessStateosState;[...]};在另一个标题中:enummyEnumProcessState{eNotRunning,eRunning};我发现应该将类型放在要接受的枚举前向声明中。但是,我不

c++ - 对于函数 : constexpr const or enum? 中的常量,我应该更喜欢哪个

我习惯用enum{my_const=123;来定义常量},因为在类中,使用staticconstexpr需要类定义之外的一些代码(参见thisquestion)。但是-在函数体中呢?最近我一直注意到人们只是在他们的函数中使用constexpr变量(实际上甚至不屑于const它们),我想知道我是否是一个落后的傻瓜我的时代intfoo(intx){enum:int{bar=456};returnx+bar;}所以,我的问题是:在函数体内使用枚举而不是constexpr变量有什么好处吗? 最佳答案 如果bar是constexprintba

c++ - 无法在枚举中声明 "div"

我想声明一个具有如下基本数学运算的枚举:enumOperations{div,mul,add,sub};但编译器会提示此声明,因为div是C++中的保留关键字。我怎样才能覆盖它?或者有什么解决办法吗?这是错误信息:error:‘div’redeclaredasdifferentkindofsymbol/usr/include/stdlib.h:158:error:previousdeclarationof‘div_tdiv(int,int)’ 最佳答案 div不是关键字,而是标准库函数,在stdlib.h中声明,也可能在cstdli

c++ - 初始化枚举索引数组?

gcc在C中有一个非常好的扩展,允许您使用枚举作为键将数据保存在数组中:enumkeys{key_alpha=0,key_beta=1,key_gamma=2};ValTypevalues={[key_alpha]={0x03b1,"alpha"},[key_gamma]={0x03b3,"gamma"},[key_beta]={0x03b2,"beta"}};这很好,因为如果必须更改列表,添加或删除一行不会破坏分配,很明显哪个键对应于哪个值,并且导致简单代码与普通标准数组初始化没有区别。不幸的是,这个扩展在g++中不可用。在C++中执行相同操作的首选轻量级方法是什么?最好不要基于之类