草庐IT

c++ - 从不兼容类型 'int' 分配给 [custom typdef]

在我的main.c文件的一个方法中,我声明了变量irq_raised,它是irq_type类型。我在另一个文件的typedef中定义了irq_type,并将其#import到main.c的顶部。typedefenum{IRQ_NONE=0x0000,IRQ_VBLANK=0x0001,IRQ_HBLANK=0x0002,IRQ_VCOUNT=0x0004,IRQ_TIMER0=0x0008,IRQ_TIMER1=0x0010,IRQ_TIMER2=0x0020,IRQ_TIMER3=0x0040,IRQ_SERIAL=0x0080,IRQ_DMA0=0x0100,IRQ_DMA1=0x

c++ - 使用类中的枚举 (C++)

我正在使用一个库,该库的类包含大量枚举。这是一个例子classTGNumberFormat{public://...enumEAttribute{kNEAAnyNumberkNEANonNegativekNEAPositive};enumELimit{kNELNoLimitskNELLimitMinkNELLimitMaxkNELLimitMinMax};enumEStepSize{kNSSSmallkNSSMediumkNSSLargekNSSHuge};//etc...};例如,在代码中我必须将它们称为TGNumberFormat::kNEAAnyNumber。我正在编写一个经常使

c++ - std::less 枚举

标准是否保证std::less会订MyEnumType好像值为MyEnumType被转换为适当大小的整数类型?enumMyEnumType{E1=0,E2=6,E3=3}; 最佳答案 是的,std::less::operator()定义为(§20.8.5/5):operator()returnsx对于在枚举类型上使用关系运算符,声明如下(§5.9/2):Theusualarithmeticconversionsareperformedonoperandsofarithmeticorenumerationtype.对于无作用域的枚举类

c++ - 在计算其初始化值时是否认为变量已定义?

这是我的小程序:enumType{b=1,c=2};intmain(){Typeb=b;std::cout哪个输出0。我可以得出结论,上面的定义由这些顺序步骤组成吗?将b声明为Type类型的变量定义该变量并使用0默认值进行初始化评估它的新值,包括变量本身(值为0)将该新值分配给变量。而且,变量是否总是初始化为0,即使它们被显式初始化?我的第二个问题是-如果它在指定示例中使用其初始化列表中的变量,为什么我不会收到关于歧义的错误?编译器是否首先尝试在变量列表中找到b,然后才检查声明的枚举? 最佳答案 第1步是正确的,但其余部分是错误的。

c++ - 在非函数调用相关声明上使用 "extern C"

我知道之前有人问过有关extern"C"的问题,但我收到的信号很复杂,希望有人能指出以下场景中的最佳实践。我已经为Linux编写了一个驱动程序,并定义了几个struct以及一些_IO、_IOR和_IOWioctl(...)调用的定义。我的结构都不包含任何函数,下面是我使用的struct、enum和ioctl示例:#ifdef__cplusplusextern"C"{#endifenumAlignment{Left=0,Right=1,Middle=3};structData{intSize;void*Address;};#definefoo_IOR(DRV_ID,1,structDat

c++ - 如何转换枚举?

我有一个第三方无作用域枚举(我无法修改),我真的很想将其转换为我自己的有作用域枚举。我如何提供转换运算符之类的东西?我想做的是这样的:#includeenumThirdPartyLetter{A=4,B=5};enumclassMyNumber{ONE=1,TWO=2//Thisdoesn'tcompile,ofcourse/*Number(constThirdPartyLetter&rhs){if(rhs==ThirdPartyLetter::A){returnONE;}else{returnTWO;}}*/};intmain(){ThirdPartyLetterletter=Thi

c++ - 防止在 C++ 中将整数转换为枚举

假设我们有enumclassMonth{jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec};每个值都是一个int,0到11。然后我希望Month类型的变量只保存这些枚举值。所以这是创建变量的唯一可行方法:Monthm=Month::may;但是这里有一些语言允许的其他方式:Monthm1=Month(12345);Monthm2=static_cast(12345);这有点令人失望。我如何只允许第一种方式?或者人们如何处理C++中的糟糕枚举? 最佳答案 HowdoIallowonlyth

c++ - 通过构造函数初始化枚举

我有一个枚举作为类的公共(public)内存,如下所示“classmyClass{public:enummyEnum{myEnum1,myEnum2};};我还声明了一个构造函数,一个公共(public)参数化构造函数,如下所示:myClass(myEnum);我在类定义之外定义相同如下:myClass::myClass(myEnumE){}如何使用默认参数初始化myEnum?我试过:我)myClass::myClass(myEnumE=0);//tointerror二)myClass::myClass(myEnumE={0});//someerror三)myClass::myClas

c++ - 从枚举中获取所有值

我有Class1风格的类(见代码)。一个枚举和一个从枚举中获取所有值的函数。值(FOO_1、FOO_2等)因类而异,值的数量也不同(sizeof(Foos))。我调用该函数一次以获取枚举的大小,保留内存并在第二次调用中我想将所有值获取到*pFoos(2,1,6在示例代码中)。有没有比使用包含所有值的数组更好的方法(size_tarr[3]={FOO_1,FOO_X,FOO_BAR})?classClass1{enumFoos{FOO_1=2,FOO_X=1,FOO_BAR=6}};Class1::GetFoos(size_t*pFoos,size_t*pSize){size_tlen=

c++ - 在 C++98 和 C++11 中访问枚举值

我在“Foo”类(如下)中定义了一组枚举值。namespaceFii{classFoo{structBar{enumBaz{BAZ1,BAZ2,BAZ3};};};};我正在使用一个结构来缩小Baz枚举值的范围,并显示有一组相关值。我的目标是将一个枚举类型的值赋给一个变量。使用上面的类定义,可以这样做:Fii::Foo::Bar::BazmyValue=Fii::Foo::Bar::BAZ1(WorksinbothC++98andC++11)但是,我觉得:乍一看,myValue似乎被初始化为一个Fii::Foo::Bar但这只是因为枚举是对父级(Bar在这种情况下)为了提高准备度,我将