草庐IT

c++ - 公共(public)基类的派生类的 TypeID

我正试图在C++中实现某种机制,从而为从公共(public)基类派生的所有类分配一个唯一的“类ID”。例如:classBaseClass{//...public:unsignedintGetID(void);//...};classDerivedClass:publicBaseClass{}DerivedClass类和BaseClass的所有其他子类应该能够返回唯一标识符,而无需向DerivedClass添加任何额外代码……然而,C++使这对我来说相当困难。任何想法将不胜感激。提前致谢!---丹 最佳答案 你应该听听Alf的话:)这

C++ 后递增 : objects vs primitive types

我们不能对右值使用预增量:inti=0;intj=++i++;//Compileerror:lvaluerequired如果我们定义一个类:classA{public:A&operator++(){return*this;}Aoperator++(int){Atemp(*this);returntemp;}};然后我们可以编译:Ai;Aj=++i++;A对象和int数据类型有什么区别j=++i++;用A编译而不用int编译? 最佳答案 发生这种情况是因为当重载运算符被定义为成员函数时,它们遵循一些与调用成员函数更相关的语义,而不是内

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++ - Qt支持的各个平台上int保证是32位的,还是只有qint32?

我记得在某处读到Qt保证在支持的平台上某些数据类型的大小。是不是int到处都是至少32位,qint32到处都是正好32位?还是别的?C++保证int至少为16位,一些Qt结构如QRect和QPoint使用int内部。我正在开发一个应用程序,其中这些类型需要32位,我不想复制它们的功能,所以我可以使用更大的类型。 最佳答案 整数类型的大小由编译器决定。我不认为可以保证普通int的大小是精确的。但是您可以通过将此行添加到main()的开头来确保您知道这不是您想要的:if(sizeof(int)!=4){throwstd::runtime

c++ - std::is_convertible 用于 type_info

在C++11中,可以通过usingstd::is_convertible确定类型A的变量是否可以隐式转换为类型B.如果你真的知道类型A和B,这很有效,但我只有type_infos。所以我正在寻找的是这样的功能:boolmyIsConvertible(consttype_info&from,consttype_info&to);是否可以在C++中实现类似的东西?如果是,怎么办? 最佳答案 在可移植的C++中做你想做的事是不可能的。可能如果您将自己限制在给定的平台上,则有可能获得部分答案。例如那些遵守ItaniumABI的平台将实现此功

c++ - 不命名 C++ 中的类型

在C++中,当我收到一条错误消息,提示xxxxx未在yyy.h中命名类型这是什么意思?yyy.h包含了xxxx所在的header。例如,我使用:typedefCP_M_ReferenceCountedFxRC;并且我在yyy.h中包含了CP_M_ReferenceCounted.h我缺少一些基本的理解,这是什么? 最佳答案 看来您需要相应地引用命名空间。比如下面的yyy.h和test.cpp就和你有同样的问题://yyy.h#ifndefYYY_H__#defineYYY_H__namespaceYyy{classCP_M_Refe

c++ - 如何找出变量的类型?

我想找出一个变量的类型(这个变量是由模板参数给定的,所以我不知道它是什么)。#include#includeintmain(){doubletest;std::cout但代码只发出:$./测试d但我需要加倍。关键是,我不知道期望哪种类型,但我必须将它写在一个必须编译的子程序中。所以d是个坏主意。 最佳答案 如果您知道必须支持的类型列表,您可以编写自己的函数来执行此操作:templatevoidprinttype(){if(typeid(T)==typeid(double))std::cout请注意,由于该函数没有类型T的参数,因此它

c++ - 在哪里可以找到 C++11 类型前缀/后缀的列表?

有人可以指点我一份完整的语言类型前缀/后缀列表吗?前缀示例:autos1(u8"I'maUTF-8string.");autos2(u"ThisisaUTF-16string.");autos3(U"ThisisaUTF-32string.");autos4(R"(RAW\STRING")");autos5(L"widestring");//etc..//*I'veonlyseenprefixeslikethisforstrings.后缀示例:auton1=7.2f;auton2=7.2d;auton3=100L;auton4=10000LL;//etc..我所有的搜索尝试都将我转到“

c++ - make_signed<unsigned long>::type 是 int?

我使用的是VisualStudio2010,下面的代码让我有些困惑:#includeautox=std::make_signed::type();x将是int类型,但我预计会很长。我知道VS10中的int和long都是4字节整数。但是即使一个signedlong装进一个int,int对我来说也不是unsignedlong对应的signedinteger类型。所以我的问题是:这是错误/技术错误还是标准规范允许这种结果? 最佳答案 C++1120.9.7.3[meta.trans.sign]描述了make_signed:IfTnames

c++ - 为什么我们不能通过类成员访问表达式使用嵌套类型?

我试图理解为什么我们不能通过类成员访问表达式使用嵌套类型。例如,我们有以下类:structU{structA{staticintv;inta;};structB{intb;};};Ua;typedefa.AT;//'a'doesnotnameatypeintmain(){std::coutDEMO标准说:N3797::5.2.5/2[expr.ref]部分Forthefirstoption(dot)thefirstexpressionshallhavecompleteclasstype.Forthesecondoption(arrow)thefirstexpressionshallha