草庐IT

C++ 空类或 typedef

我目前在我的代码中使用类似的东西:classB:publicA{};使用typedef不是更好吗?typedefAB; 最佳答案 这取决于。如果你想要A和B不同但相关的类型,B应该扩展A.如果您希望它们相同,您应该使用typedef.你能提供更多的上下文吗? 关于C++空类或typedef,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2176798/

C++ typedef 结构与类

我对C++不是很熟悉,当我尝试一些测试程序时,我遇到了一个关于最好的问题,如果我可以这样说的话,可以在C++代码中定义一些原始元素。让我们来看一个描述矩形的类。它会创建它们、绘制它们、旋转、调整大小等等……现在在大多数情况下我们必须处理Canvas上的点。矩形本身由2个点描述:左上角和右下角。同样为了旋转它,你需要一个角度和一个点(anchor)。或者可能要移动它,您需要给定矩形的新anchor。我想我使用积分表达了我的观点。那么什么更有效率呢?将这个原始点定义为类还是结构?classcPoint{public:intX;intY;};或typedefstruct{intX;intY;

c++ - `struct X typedef` 与 `typedef struct X` 的含义是什么?

我在现有代码库中有以下(工作)代码,用于C和C++之间共享的包含文件,在MSVC(2010)和WindowsDDK上编译:structX{USHORTx;}typedefX,*PX;和:enumMY_ENUM{enum_item_1,enum_item_2}typedefMY_ENUM;据我所知,正确的定义应该是这样的:typedefstruct{USHORTx;}X,*PX;下面的表格有什么用吗?我错过了什么吗? 最佳答案 事实typedef和typedef有效仅来自语言语法定义。typedef被归类为存储类说明符(就像stati

c++ - 如何修复 -Wsubobject-linkage 警告?

我在clang和VC++中收到编译良好且无警告的代码的gcc警告,因此我假设它是特定于gcc的。这是代码:namespacemyns{usingTokenList=std::vector;usingRuleList=std::vector;usingRulePathPair=std::pair;usingCandidatesCollection=struct{std::maptokens;std::setrules;};classA{private:CandidatesCollection_candidates;};}//namespacemyns警告是:warning:'myns::

c++ - 如何使用 C/C++ 生成网络数据包

我想生成一个网络数据包以通过(例如)端口123发送到NTP服务器,以便我可以接收和解析返回的数据包。目标是更好地了解网络系统如何生成、读取和回复数据包。(1)是否应该使用结构体来生成数据包?(2)我不确定如何正确填充结构中的各个字段;例如,源IP地址和目标IP地址是否应该设置为十六进制值?还是有更人性化的方式?(3)然后,一旦填充了字段,是否可以通过UDP连接通过send()/write()将结构发送到NTP服务器?(或TCP,如果协议(protocol)要求的话)我的做法合理吗?我一直在阅读NTPRFC,但我仍然不确定我的客户端应该向服务器发送什么(例如IP地址;这不应该由网络层he

c++ - 声明 typedef 类型

structmystruct{inti;doublef;};typedefmystructmyotherstruct;//theother.cppfilestructmystruct;//OK,thisisacorrectforwarddeclaration.structmyotherstruct;//errorC2371(invc2k8):'myotherstruct':redefinition;differentbasictypes大家好。为什么我不能转发声明myotherstruct? 最佳答案 myotherstruct标识

c++ - Klocwork(或其他工具)能否识别类型、typedef 和#define 指令?

我使用lookingfor工具来解决helpdetect错误,这些错误阻止程序作为64位代码正常运行。最近,我一直在玩弄Klocwork及其自定义跳棋功能,它让我可以使用XPath将源代码作为树来导航。这作为正则表达式的“更智能”替代方案很有用,但我无法让它识别类型。例如,假设我想找到使用int或long的for循环的每个实例数数。下面的代码很容易找到。for(inti=0;i搜索这段代码很简单,因为变量定义就在循环内部。但是,请考虑以下示例。inti;//...for(i=0;i这很难找到,因为变量定义与循环是分开的,而且必要的XPath表达式要么笨拙,要么容易出错。那么,自定义Kl

c++ - crtp 和类型可见性

我有一个我正在尝试解决的难题,从根本上可以归结为以下示例:templatestructA{typedeftypenameCT::VALUE_TFOO;//FOOisdependentonCT};templatestructB{typedeftypenameCT::BARBAR;BARfoo(){}};templatestructC:B>{typedefDTVALUE_T;typedeftypenameA::FOOBAR;};intmain(){Cc;}我可以尝试解释上面的内容(我试了大概三遍,把文字删掉了!),但基本上要求是:C必须继承自B用C输入(利用CRTP),即B>C是唯一可以实

c++ - 使 typedef 不兼容

情况:typedefintTypeA;typedefintTypeB;我需要使TypeA与TypeB不兼容(因此任何将TypeA分配给TypeB的尝试都会触发编译错误),同时保留内置类型(运算符)提供的所有功能。一种方法是将每种类型包装到单独的结构/类中(并重新定义所有运算符等)。还有其他更“优雅”的方法吗?不允许使用第三方库。不支持C++0x/C++11x。(支持C++2003) 最佳答案 唯一的方法是创建一个新类型(例如使用BOOST_STRONG_TYPEDEF)。 关于c++-使

c++ - `typedef enum {} t` 是否允许 C++0x 中的作用域枚举元素标识符?

我相信新的C++标准允许枚举类型有一个额外的“作用域”:enumE{e1,e2};Evar=E::e1;因为我知道很多包含旧C风格枚举类型定义的源文件,我想知道新标准是否允许对这些匿名枚举类型使用类型定义:typedefenum{d1,d2}D;Dvar=D::d1;//error? 最佳答案 新标准将添加一种新型的强枚举,但语法会略有不同,旧式枚举将兼容(C++03中的有效代码将是有效的C++0x代码)因此您将不需要做任何事情来保持遗留代码有效(不是typedef,不是其他任何东西)。enumclassE{e1,e2};//new