草庐IT

c++ - C 与 C++ 中的枚举存储差异

我在移植到C++的C项目中遇到了以下构造;enumTestEnum{A=303,B=808}_TestEnum;intfoo(){_TestEnum=B;}当使用GCC编译并查看生成的代码时,我得到:nils@doofnase~$gcc-std=c90-O2-c./test.c-otest.onils@doofnase~$sizetest.otextdatabssdechexfilename5900593btest.o因此使用了零字节的数据或BSS段。另一方面,如果我用C++编译,我得到:nils@doofnase~$g++-std=c++11-O2-c./test.c-otest.o

c++ - C++ 中默认初始化的全局强类型枚举是什么?

我正在尝试确定全局强类型枚举初始化的默认值。下面的代码当然编译不过。#includeusingnamespacestd;enumclassA{a=10,b=20};//Globalstrongly-typedenum,uninitializedAk;intmain(){if(k==A::a)cout“k”初始化为什么? 最佳答案 k具有静态存储持续时间并且静态对象是零初始化的,我们可以通过转到draftC++standard看到这一点3.6.2非局部变量的初始化2段:Variableswithstaticstorageduratio

c++ - 循环枚举值

在枚举上索引循环有多糟糕——或者说它完全可以接受吗?我定义了一个枚举。文字的值是默认值。分配的值没有任何意义,将没有任何意义,将来添加的任何文字的值也将没有任何意义。它只是被定义为限制允许的值并使事情更容易遵循。因此,值将始终从0开始并增加1。我可以像这样设置一个循环吗:enumMyEnum{value1,value2,value3,maxValue}for(MyEnumi=value1;i(i+1)){} 最佳答案 我刚才为这些情况写了一个枚举迭代器enumFoo{A,B,C,Last};typedeflitb::enum_ite

c++ - 如何使枚举类与 'bit-or' 功能一起使用?

我通常将enum与“位或”或|一起使用,以允许对象具有一些选项。如何使枚举类使用“位或”功能? 最佳答案 您需要为您的枚举类重载运算符并通过转换为基础类型来实现它们:enumclassfoo:unsigned{bar=1,baz=2};foooperator|(fooa,foob){returnstatic_cast(static_cast(a)|static_cast(b));}…当然这可以推广(使用SFINAE和std::underlying_type)。在我看来,C++没有提供开箱即用的功能是一种疏忽。这是一般的实现方式://

c++ - 具有枚举规范的模板模板类在 MSVC++ 编译器 : C3201 上失败

代码这是SSCCE我的问题示例://MyLibrary,whichIwanttotakeintheuser'senumandatemplateclasswhichtheyputper-enumspecializedcodetemplateclassEnumStruct>structLibraryT{/*Librarystuff*/};//UserDefinedEnumandAssociatedTemplate(whichgetsspecializedlater)namespaceMyEnum{enumEnum{Value1/*,...*/};};templatestructMyEnum

c++ - 为什么当枚举或 int 值作为函数的 bool 参数传递时 gcc 不发出警告?

我有以下代码:typedefenum{FOO,BAR,BAZ}foo_t;staticvoidafunc(boolis_it_on){/*dothejob*/}intmain(void){afunc(BAZ);return0;}编译此代码不会生成任何警告消息,即使为编译器提供了-Wall-Wextra选项。我什至尝试过使用-Wconversion选项,但它没有效果,因为bool和enum对于g++似乎具有相同的大小。(据我所知,enum类型的大小未在规范中定义)我已经梳理了gcc手册,但一无所获。问题:有没有办法强制编译器在这种情况下生成警告?或者这种隐式转换是否符合C++规范?我使用

c++ - 有没有可以枚举端口的跨平台c++串口库?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭2年前。Improvethisquestion我正在寻找一个可以连接到串行端口设备并与之通信的C++库。我需要一个可以在windows和linux上使用的。我已经找到了“serialib”,但是它没有枚举可用端口的功能。所以我要么需要一个跨平台的“端口枚举器”库,要么需要一个全新的跨平台串口库。有没有人知道一个好的?谢谢,丹。

c++ - 将错误代码枚举与 std::error_code 进行比较

我正在使用C++11system_error错误代码库为我正在制作的库创建自定义错误类。我以前用boost::error_code做过这个,但我不能完全让它与std::error_code一起工作。我正在使用GCC4.6。基本上,我已经布置了所有样板代码以创建错误类、error_category和STD命名空间中的转换例程以将我的自定义枚举转换为std::error_code对象:namespacemylib{namespaceerrc{enummy_error{failed=0};inlineconstchar*error_message(intc){staticconstchar*

c++ - 向作用域枚举添加按位运算和 bool 值转换——圣诞节探索

假设我疯了,决定创造以下怪物:#include#include//Utilityproxytype-convertiblebacktoEbutalsopermitsboolconversion//foruseinconditions.////e.g.//Foof=Foo::Bar&Foo::Baz;//if(f&Foo::Baz){/*...*/}//template,void>>structEnumToBoolProxy{operatorE()const{return_val;}explicitoperatorbool(){usingUT=std::underlying_type_t

c++ - 枚举是实现位标志的规范方式吗?

目前我正在使用枚举来表示一个小游戏实验中的状态。我这样声明它们:namespaceState{enumValue{MoveUp=1这样我就可以这样使用它们了:State::Valuestate=State::Value(0);state=State::Value(state|State::MoveUp);if(mState&State::MoveUp)movement.y-=mPlayerSpeed;但我想知道这是否是实现位标志的正确方法。不是有一个特殊的位标志容器吗?我听说过std::bitset,我应该使用它吗?你知道更有效的方法吗?我做得对吗?我忘了指出我正在重载我的枚举的基本运