草庐IT

c++ - 使用枚举作为常量表达式。哪个编译器是正确的?

以下代码使用枚举成员m作为常量表达式,即作为模板参数。代码在gcc下编译但不在clang(livedemo)下编译。Clang说“错误:非类型模板参数不是常量表达式”。问题可以通过交换线路//1来解决通过A::m>a.因此,我的问题不是如何解决这个问题,而是哪个编译器是正确的。templatestructA{};templatestructtst{enum:size_t{m=n%15};templatevoidcall(tstconst&t2){Aa;//1}}; 最佳答案 根据标准,Clang拒绝代码是正确的。t2.m是类成员访问

c++ - 枚举声明中枚举器的类型

在C++中,特别是在C++14n4296中,有两个段落谈论枚举器的类型,这对我来说似乎是矛盾的。参见7.2/5(在n4659中为10.2/5):Eachenumerationdefinesatypethatisdifferentfromallothertypes.Eachenumerationalsohasanunderlyingtype.Theunderlyingtypecanbeexplicitlyspecifiedusinganenum-base.Forascopedenumerationtype,theunderlyingtypeisintifitisnotexplicitly

c++ - 基于枚举的模板是个好主意吗?

我正在编写一个唯一ID生成器,它具有不同的策略来生成在一天、一周或一个月内唯一的ID。我不想创建具有虚函数机制的类层次结构像下面的代码片段那样做是个好主意吗?有什么建议吗?enumDuration{Day,Week,Month};templateclassIDGenerator{generateId();} 最佳答案 是的,它可以接受并且仅文件如果编译时多态性对您来说足够了-您将节省虚拟调用,这将允许更好的编译器优化。 关于c++-基于枚举的模板是个好主意吗?,我们在StackOverf

c++ - 枚举 HWND 属性 C++

我正在尝试从HWND获取属性。我使用了来自UsingWindowProperties的信息,但下面的示例对我不起作用。我在编译代码时遇到错误。argumentoftype"BOOL(__stdcall*)(HWNDhwndSubclass,LPCSTRlpszString,HANDLEhData)"isincompatiblewithparameteroftype"PROPENUMPROCEXW"这是我的回调函数BOOLCALLBACKPropEnumProcEx(HWNDhwndSubclass,LPCSTRlpszString,HANDLEhData){returnTRUE;}这就

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++ - 如何将一个类的嵌套枚举用作另一个类的嵌套枚举?

下面的代码将在enumen=A::en;行给出编译错误,但它描述了我想做的事情(使A的嵌套枚举成为也是B的嵌套枚举)。#includeusingnamespacestd;structA{enuma_en{X=0,Y=1};};structB{enumb_en=A::a_en;//syntaxerror};intmain(){cout所以问题是我如何在C++中做这样的事情? 最佳答案 将枚举放在A和B都可以继承的基类中。 关于c++-如何将一个类的嵌套枚举用作另一个类的嵌套枚举?,我们在S

c++ - C - 枚举索引数组的优点/缺点

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。根据我的经验,现实世界很少提供非负整数的索引。许多事情甚至没有用数字表示。许多用数字表示索引的东西的索引不是从0开始的。那为什么我们仍然局限于整数索引数组?也许我错了,但枚举索引数组似乎通常比数字索引数组更合适(因为枚举通常更准确,是“真实世界”的表示形式)。虽然枚举通常可以相对容易地转换为C风格的数组索引......enumWeekday={SUNDA

c++ - 使用(非类型)枚举参数定义内部类成员函数模板

我在定义和特化成员函数时遇到困难update()内部类的Outer::Inner以非类型(枚举)参数为模板。#includetemplatestructOuter{structInner{enumType{A,B,C};templatevoidupdate();};};//Definitiontemplatetemplate::Inner::TypeT2>voidOuter::Inner::update(){}//Specializationtemplatetemplate::Inner::A>voidOuter::Inner::update(){}intmain(){returnEX

c++ - 这是(枚举 : char {}) a gcc bug?

在gcc-4.5下打印0,在gcc-4.6下打印1。#includeenumVenueId:char{};intmain(intargc,char**argv){VenueIdv=(VenueId)'P';std::cout 最佳答案 根据标准,VenuedId具有char类型作为基础类型,因此v应包含char'P',v=='P'应该产生true。§7.2枚举声明Eachenumerationdefinesatypethatisdifferentfromallothertypes.Eachenumerationalsohasanun

c++ - 无法从另一个类中定义的枚举声明 Q_ENUM

Thisdocumentation州Ifyouwanttoregisteranenumthatisdeclaredinanotherclass,theenummustbefullyqualifiedwiththenameoftheclassdefiningit.Inaddition,theclassdefiningtheenumhastoinheritQObjectaswellasdeclaretheenumusingQ_ENUMS().但是在下面的例子中我无法做到这一点。A类:#ifndefCLASSA_H#defineCLASSA_H#includeclassClassA:publ