草庐IT

has_typedef_X

全部标签

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++ fatal error C1001 : An internal error has occurred in the compiler

在Release模式下编译时出现以下错误。1>d:\users\eyal\projects\code\yalla\core\src\runbox\win32\window.cpp:fatalerrorC1001:Aninternalerrorhasoccurredinthecompiler.1>(compilerfile'f:\dd\vctools\compiler\utc\src\p2\main.c',line249)1>Toworkaroundthisproblem,trysimplifyingorchangingtheprogramnearthelocationslistedab

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++ - 使 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

c++ - C1001 : An internal error has occurred in the compiler

这应该是不言自明的。我正在尝试实现分布排序,但MSVC编译器崩溃了。这似乎是用我的SFINAE检测成员函数的特定情况,如果我不将indexert传递给函数,或者替换has_get_index,这似乎不会发生。如果我删除剩余的索引器重载中的任何一个,它也不会发生。如果sortable有一个getIndex()const成员,问题仍然存在。1>test.cpp(34):fatalerrorC1001:Aninternalerrorhasoccurredinthecompiler.1>(compilerfile'msc1.cpp',line1420)1>Toworkaroundthispro

C++ : has_trivial_X type traits

boost库,似乎是即将推出的C++0x标准,定义了各种类型特征模板,以区分具有平凡构造函数、复制构造函数、赋值或析构函数的对象与不具有平凡构造函数的对象。其最重要的用途之一是优化某些类型的算法,例如通过使用memcpy。但是,我不明白所有各种has_trivial_X模板之间真正的实际区别。C++标准只定义了我们在这里关注的两大类类型:POD和非POD。如果一个类型具有已定义的构造函数、复制构造函数、赋值运算符或析构函数,则该类型是非POD。换句话说,任何不是内置类型或内置类型的C结构的东西都不是POD。那么区分has_trivial_assign和has_trivial_const

c++ - 递归 lambda 的 Typedef

有没有一种方法可以创建一个typedef以便编译以下内容(y组合器的基本“纯”实现)?typedef???f;[](fx){x(x);}([](fx){x(x);});这具有创建“递归lambda”的效果,即通过使用第二个lambda来获取对自身的引用来调用自身。第一个lambda中的x是对第二个lambda的引用,因此x(x)使用对自身的引用调用第二个lambda。此后,第二个lambda通过调用x(x)递归。这段代码在执行时应该会产生一个无限循环,直到遇到堆栈溢出。第二个函数的更复杂的实现可以产生任意递归行为。我尝试过typedefing各种版本的void(*)(...)但我不相信