我正在为我正在学习的类(class)使用枚举,我正在使用Google查找示例以确保我正确使用了枚举。我去了几个网站,包括MSDN网站,枚举列在公共(public)而不是私有(private)下。我一直认为数据成员是私有(private)的。我偏离基地了吗?如果是,为什么? 最佳答案 枚举是一种类型,而不是数据成员。如果类的用户需要知道它,你应该公开它;否则,将其设为私有(private)。用户需要了解它的典型情况是将其用作公共(public)成员函数的参数类型。 关于c++-在类中使用枚
我有两个枚举,如果一个枚举中有一个值与另一个枚举中的值同名:enumA{joe,bob,doc};enumB{sunday,monday,doc};编译器(VisualStudio的)提示doc的重新定义,这意味着它将其视为全局变量。是这样吗?这不是我所期望的行为,它迫使我管理项目中所有枚举元素的名称。任何见解都会有所帮助。 最佳答案 它不被视为全局变量。它被视为全局标识符。更准确地说,它被视为声明enum的任何命名空间中的标识符。在您的情况下,这是全局命名空间。要了解全局标识符和全局变量之间的区别,请尝试获取枚举的地址。;)通常,
我发现C++提供了默认的operatorenum的函数类型:#includeusingnamespacestd;enumOpType{Select,Insert};intmain(){OpTypet=Select;cout运行结果为:0虽然不提供默认operator>>功能:#includeusingnamespacestd;enumOpType{Select,Insert};intmain(){OpTypet=Select;cin>>t;return0;}构建它会产生以下编译错误:prog.cpp:Infunction‘intmain()’:prog.cpp:11:6:error:n
环境:MicrosoftVisualStudio2010withSP1Preminum(10.0.40219.1SP1Rel),WindowsXPSP3VC10编译器支持auto关键字,但推导的类型相关信息对于枚举似乎并不总是正确的。例子:#includeenumfruit_t{apple=100,banana=200,};intmain(){constautopa=newauto(banana);constautopb=newfruit_t(banana);static_assert(std::is_same::value,"notsame!");deletepb;deletepa;
这个最小的例子在没有警告的情况下编译并运行://librarytemplatestructlibrary_struct{};//userenumclassmy_enum{x,y,z};intmain(){library_structunused;//l.7(void)unused;return0;}现在,我希望编译器从枚举模板参数my_enum::x中推导出类型模板参数my_enum。这看起来会好得多:library_structunused;我见过编译器能够推导出模板参数的例子,但我只被允许省略模板参数列表中的最后一个模板参数。那么这里是否可以省略枚举类型呢?编辑:我对没有宏的解决方
清理使用硬编码整数文字而不是枚举的旧c/c++代码,找到函数声明已被正确重构而不是正文的地方是乏味的。例如enumimportant{little=1,abit=2,much=3};voidblah(inte){//magicstuffhere}voidboing(inte){...}voidguck(importante){switch(e){case3://thiswouldbeagoodplaceforawarningblah(e);//andthisbreak;default:boing((int)e);//butthisisOK(althoughimperfectandawa
这个讨论是关于默认值的名称:C#:ShouldthedefaultvalueofanenumbeNoneorUnknown?但是,最近与我交谈过的很多人都认为默认枚举值有害、不必要并且可能导致不良做法。例如考虑以下内容:enumeJobStates{JOB_STATE_INITIALISING,JOB_STATE_PROCESSING,JOB_STATE_DONE};将作业写成JOB_STATE_UNKNOWN是没有意义的,但您可以想象任何可用于监视所述作业的结构都可以使用这样的值。在定义枚举时是否有关于创建默认值的最佳实践/经验法则?是否应尽可能避免使用它们?
我有一个关于enum和enumclass的不同形式的问题,特别是指定大量(有范围的!)常量。我想知道是否有一种方法可以声明作用域枚举,它可以隐式转换为整数。一个用例是指定寄存器地址并能够使用类似MY_REGISTERS::FOO的内容访问它们。这是我所知道和遇到的选项,请想象一个带有签名voiddo_something(uint32_tbla)的函数存在。1:枚举类枚举类是有作用域的,但不能隐式转换为整数。我发现不必将它static_cast为整数很重要,因此这看起来不合适。enumclassFoo:uint32_t{BAR=0x0000,BAZ=0x0001};do_somethin
我有一些模板代码适用于Xcode4.5和LLVM3.0,但适用于VS2010ExpressC++工具链(v10.0.30319.1)。我正在使用我无法控制的第三方API。它以只能由API函数解释的黑盒“blob”形式为我的代码提供值://API_Secretisablack-boxencapsulationofafloating-pointnumberorabooleanvalue.//Itisprovidedbyathird-partyAPI,withassociatedaccessfunctions.//Forallintentsandpurposes,it'sacompleteb
有很多方法可以遍历连续的枚举,比如enumAnimal{Cat,Dog,Dolphin}但是有没有一种方便简单的方法来遍历不连续的枚举元素,比如enumAnimal{Cat=0,Dog=5,Dolphin=8} 最佳答案 对此的简短回答是“否”。您可以创建一个表animals,然后在animals上使用范围循环。这是一个完整的“演示”:#includeusingnamespacestd;enumAnimal{Cat=0,Dog=5,Dolphin=8};intmain(){Animalanimals[]={Cat,Dog,Dolph