草庐IT

c++ - 在什么情况下我应该为 C++11 中的枚举类使用固定宽度的整数

我应该在什么情况下使用它:enumclassMyFixedType:uint32_t//oranyotherfixedwidthintegertype{ID1,ID2,ID3};关于这个:enumclassMyType{ID1,ID2,ID3};? 最佳答案 一些可能有用的场景超出了我的脑海:空间有限,您真的不需要标准的int大小的枚举。如果您使用的系统中整数以64位格式存储,并且您只有少于255个不同的枚举值,则您可能需要指定您希望/需要每个枚举元素的位数更少。机器之间的高效通信。假设您知道在两台机器上使用相同的字节顺序,但整数具

c++ - 为枚举索引数组重载 std::get

我发现拥有一个基本上像std::array但由一些枚举的值索引的类相当方便。我想不难想象如何实现它,假设它有一个像这样的签名:classenum_array另一方面,在尝试实现所有标准的std::array相关函数时,我注意到为此类编写重载的std::get函数模板没那么简单。首先,我认为这个std::get具有上述枚举的值作为模板参数是很自然的,因此出现了大多数问题:1)如果我想在类外定义这样的函数,我必须做类似的事情:namespacestd{templateEnumT&get(enum_array&val)但问题是在指定第一个模板参数时EnumT仍然是未知的,所以这个模板实际上是

c# - C++ 中的枚举类 - 替换 - 在 C# 中

看看这些c++代码:enumclassFlag:int32{f_unread=(1这些代码在c#中隐藏的是什么? 最佳答案 UsingTangible.看起来差别不大。[Flags]publicenumFlag:int{f_unread=(1在c#中,要使用enum作为flags操作的位域,需要添加FlagsAttribute,即添加[FlagsAttribute]或者[Flags]在enum之前。 关于c#-C++中的枚举类-替换-在C#中,我们在StackOverflow上找到一个类

c++ - 是否嵌套枚举类?

一个人可以有独立的枚举类:enumclassStreamOpenMode{read,write,readWrite};classStream{public:Stream(StreamOpenModeopenMode)//...};或者将它们嵌套在另一个类中:classStream{public:enumclassOpenMode{read,write,readWrite};Stream(OpenModeopenMode)//...};选择一个而不是另一个的技术原因是什么?例如,嵌套变体不能前向声明,这可能会导致大型项目中的循环依赖问题。 最佳答案

c++ - 如何让 Oxygen 到 "link"以枚举定义?

我有以下代码:///\fileDoxygen_tests.h/****\enumTick_Column_Type**\briefValuesthatrepresentTick_Column_Type.**/enumTick_Column_Type{TC_OPEN,///一切似乎都工作正常(枚举最终在文件范围内结束,但我有一个\file,所以它与描述一起出现,格式正确。我想要(但没有发生)的是,我希望Tick_Data_Row::m_cols文档中对Tick_Column_Type的引用链接回该文档页面。Doxygen通常似乎很聪明地弄清楚“啊哈,这是一个我知道的名字,我会热链接它”,但

c++ - 在 C++ 中显示、更新和验证枚举值

#includeenumSEX{MALE,FEMALE};intmain(intargc,char**argv){enumSEXthe_sex=MALE;return0;}如何在终端或控制台上显示the_sex值,从终端或控制台接受值以更新the_sex的值,以及如何验证the_sex变量的输入? 最佳答案 HowcanIacceptvaluesfromtheterminalorconsoletoupdatethevalueofthe_sexandhowcanIvalidtheinputforthe_sexvariable?输入可以

c++ - doxygen:如何记录\enum 值外线?

准确地说:我知道如何在声明时对枚举进行dox,我想改为不在线地对它们进行dox。我想让头文件没有doxygen注释;它们都在.cpp文件中。这对函数、类、typedef等来说不是问题。我还可以像这样记录enum本身:/*!\enumMyClass::MyEnumFooBarBaz\valueFirstEnumValue但是我如何记录enum的值呢?谢谢! 最佳答案 您需要根据docs使用\var 关于c++-doxygen:如何记录\enum值外线?,我们在StackOverflow上找

c++ - 自文档化代码是否值得潜在的性能问题?

我创建了一个小类,允许我使用强类型枚举的枚举器作为标志(组合)。我正在使用type_traits进行底层类型检测,因此它也应该是稍微类型安全的,并且大部分是在编译时处理的。但是,我想知道这是否真的值得。我现在可以写类似的东西了voidFoo(FlagsValue);并且程序员将看到他只能使用Mode中的枚举器(例如Mode::Read),而且他不能将任何其他枚举与Mode组合。你认为这是比什么更好的方法吗voidFoo(intMode);,不知道大家能不能欣赏? 最佳答案 您的建议被认为是最佳实践。使用现代优化编译器应该没有性能成本

c++ - 更改枚举类型 C++ 的数据大小

默认情况下,枚举类型变量采用整数大小,即内存中的4个字节。有什么办法可以将其转换为任何其他数据类型的大小。我不是在谈论类型转换,而是在谈论存储枚举类型所需的内存大小。Ihavereferredthisquestion但它没有说明将整数大小更改为任何其他大小。任何帮助。 最佳答案 c++11介绍stronglytypedenums(和StronglyTypedEnums(Revision3)),它允许指定基础整数类型:#includeenumE_ushort:unsignedshort{EUS_1,EUS_2};enumE_ulong

c++ - "no ' operator++(int) ' declared for postfix '++ ' [-fpermissive]"枚举

这个问题在这里已经有了答案:HowcanIiterateoveranenum?(28个答案)Whycan'tIincrementavariableofanenumeratedtype?(10个答案)关闭9年前。我有枚举enumProgramID{A=0,B=1,C=2,MIN_PROGRAM_ID=A,MAX_PROGRAM_ID=C,}CurrentProgram;现在,我正尝试像这样递增CurrentProgram:CurrentProgram++,但编译器提示:没有为后缀'+声明'operator++(int)'+'[-fpermissive]。我认为有这样一个运算符可以增加“枚