jjzjj

c++ - 多态指针的typeid?

我不明白为什么指针不是多态类型,因为我们可以使用指向派生类的基类指针来调用派生类的虚函数。这表明在运行时,系统可以确定指针是否是多态的,不是吗?(这是来自typeidforpolymorphictypes的后续问题) 最佳答案 事实上,标准(C++11)在描述typeid多态类类型,而不是多态类型/:首先,这里描述了当typeid应用于类类型的左值时会发生什么(即,它执行您期望的情况):(§5.2.8/2)Whentypeidisappliedtoaglvalueexpressionwhosetypeisapolymorphiccl

c++ - 为什么 typeid 返回 int 和 const int 是相同的类型

if(typeid(int)==typeid(constint))cout程序输出:Sametypes我错过了什么吗?这些不是相同的类型哈哈。 最佳答案 它们不是同一个类型,但是typeid运算符去掉了const和volatile。从第5.2.8节[expr.typeid]:Thetop-levelcv-qualifiersoftheglvalueexpressionorthetype-idthatistheoperandoftypeidarealwaysignored. 关于c++-为

用于类比较的 C++ dynamic_cast vs typeid

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++equivalentofinstanceof我想知道dynamic_cast和typeid之间的区别仅在于类比较(除了dynamic_cast允许访问子类的方法和typeid仅对类比较有用)。我发现一个两年前的StackOverflow也在问同样的问题:C++equivalentofjava'sinstanceof.但是,它已经有两年了,我不想删除旧帖子(我不确定typeid什么时候出来),所以我想重新问同样的问题,但略有不同。基本上,我有类A和类B,它们都是抽象类C的子类。类C被作为方法的参数接收,我

C++11 - typeid 唯一性

在C++11中,我正在使用这个typeid(T).name()用于我自己的哈希计算。我不需要程序运行或编译之间的结果相同。我只需要它对于类型是唯一的。我知道,它可以为不同的类型返回相同的名称,但通常使用const、指针等。在我的例子中,T只是classXY、structXX或派生类型。在这种情况下,我可以假设T是唯一的吗? 最佳答案 您应该使用std::type_index用于映射目的。Thetype_indexclassisawrapperclassaroundastd::type_infoobject,thatcanbeused

c++ - 什么时候使用 'typeid' 是最好的解决方案?

不使用typeid的原因有很多。除了使用type_info的成员(实现定义的行为)之外,通常(总是?)可以使用其他C++语言特性来提供类似的功能,例如:重载、虚函数等。那么,除了依赖于实现定义的行为的用法,有没有人有一个现实世界的例子,其中typeid是最好的解决方案? 最佳答案 So,excludingusagethatreliesontheimplementationdefinedbehavior,doesanybodyhavearealworldexamplewheretypeidisthebestsolution?我有时会在

c++ - 为什么 typeid.name() 使用 GCC 返回奇怪的字符以及如何使它打印未损坏的名称?

当我运行这个main.cpp时怎么会:#include#includeusingnamespacestd;structBlah{};intmain(){cout通过使用GCC版本4.4.4编译它:g++main.cpp我明白了:4Blah在VisualC++2008上,我会得到:structBlah有没有办法让它只打印Blah或structBlah? 最佳答案 name的返回是实现定义的:甚至不需要实现为不同类型返回不同的字符串。你从g++得到的是decoratedname,您可以使用c++filt命令或__cxa_demangle

c++ - 在 `?:` 代码中奇怪地使用 `typeid`

在我正在进行的一个项目中,我看到了这段代码structBase{virtual~Base(){}};structClassX{boolisHoldingDerivedObj()const{returntypeid(1?*m_basePtr:*m_basePtr)==typeid(Derived);}Base*m_basePtr;};我从来没有见过这样使用typeid。为什么它会用?:做那种奇怪的舞蹈,而不是只做typeid(*m_basePtr)?有什么理由吗?Base是一个多态类(带有虚拟析构函数)。编辑:在这段代码的另一个地方,我看到了这个,它似乎是“多余的”templateT&n

c++ - RTTI 有多贵?

我知道使用RTTI会造成资源损失,但影响有多大?我所看到的所有地方都只是说“RTTI很昂贵”,但它们实际上都没有提供任何基准或定量数据来保护内存、处理器时间或速度。那么,RTTI到底有多贵?我可能会在只有4MBRAM的嵌入式系统上使用它,因此每一位都很重要。编辑:AsperS.Lott'sanswer,如果我包括我实际在做的事情会更好。Iamusingaclasstopassindataofdifferentlengthsandthatcanperformdifferentactions,因此仅使用虚函数很难做到这一点。似乎使用一些dynamic_cast可以解决这个问题,允许不同的派

c++ - RTTI 有多贵?

我知道使用RTTI会造成资源损失,但影响有多大?我所看到的所有地方都只是说“RTTI很昂贵”,但它们实际上都没有提供任何基准或定量数据来保护内存、处理器时间或速度。那么,RTTI到底有多贵?我可能会在只有4MBRAM的嵌入式系统上使用它,因此每一位都很重要。编辑:AsperS.Lott'sanswer,如果我包括我实际在做的事情会更好。Iamusingaclasstopassindataofdifferentlengthsandthatcanperformdifferentactions,因此仅使用虚函数很难做到这一点。似乎使用一些dynamic_cast可以解决这个问题,允许不同的派
78910