草庐IT

typeid_t

全部标签

c++ - 带 typeid 的逗号运算符

我在学习AGenericNon-intrusiveSmartPointerImplementation。我对第4节有些困惑。一种说法是theexpressionsuppliedastheargumenttothetypeidoperatorisonlyevaluatediftheresulttypeisanlvalueofpolymorphicclasstype.相关的示例代码是:templatevoid*startOfObject(T*p){void*q=static_cast(p);typeid(q=dynamic_cast(p),*p);//Thislinereturnq;}AF

c++ - 带 typeid 的逗号运算符

我在学习AGenericNon-intrusiveSmartPointerImplementation。我对第4节有些困惑。一种说法是theexpressionsuppliedastheargumenttothetypeidoperatorisonlyevaluatediftheresulttypeisanlvalueofpolymorphicclasstype.相关的示例代码是:templatevoid*startOfObject(T*p){void*q=static_cast(p);typeid(q=dynamic_cast(p),*p);//Thislinereturnq;}AF

c++ - 取消引用 typeid 中的空指针

在研究最近的一个问题时,我发现了'03标准[1]中的以下条款:Whentypeidisappliedtoanlvalueexpressionwhosetypeisapolymorphicclasstype(10.3),theresultreferstoatype_infoobjectrepresentingthetypeofthemostderivedobject(1.8)(thatis,thedynamictype)towhichthelvaluerefers.Ifthelvalueexpressionisobtainedbyapplyingtheunary*operatortoap

c++ - 取消引用 typeid 中的空指针

在研究最近的一个问题时,我发现了'03标准[1]中的以下条款:Whentypeidisappliedtoanlvalueexpressionwhosetypeisapolymorphicclasstype(10.3),theresultreferstoatype_infoobjectrepresentingthetypeofthemostderivedobject(1.8)(thatis,thedynamictype)towhichthelvaluerefers.Ifthelvalueexpressionisobtainedbyapplyingtheunary*operatortoap

c++ - typeid() 在 g++ 中返回额外的字符

classfoo{public:voidsay_type_name(){std::cout上面的代码使用g++在我的ubuntu机器上打印P3foo。我不明白为什么它打印P3foo而不仅仅是foo。如果我像这样更改代码std::cout它打印3foo。有什么想法吗? 最佳答案 因为它是指向foo的指针。foo有3个字符。所以它变成了P3foo。另一个是foo类型,所以它变成3foo。请注意,文本是依赖于实现的,在这种情况下,GCC只是为您提供了内部的、错位的名称。在程序c++filt中输入该损坏的名称以获得未损坏的名称:$c++fi

c++ - typeid() 在 g++ 中返回额外的字符

classfoo{public:voidsay_type_name(){std::cout上面的代码使用g++在我的ubuntu机器上打印P3foo。我不明白为什么它打印P3foo而不仅仅是foo。如果我像这样更改代码std::cout它打印3foo。有什么想法吗? 最佳答案 因为它是指向foo的指针。foo有3个字符。所以它变成了P3foo。另一个是foo类型,所以它变成3foo。请注意,文本是依赖于实现的,在这种情况下,GCC只是为您提供了内部的、错位的名称。在程序c++filt中输入该损坏的名称以获得未损坏的名称:$c++fi

c++ - 使用 GCC 编译没有 RTTI 的时间 typeid

有没有办法获得编译时间typeid来自禁用RTTI的GCC的信息?在VisualStudio下,像constchar*typeName=typeid(int).name();这样的简单命令将适本地返回“int”,即使RTTI被禁用。不幸的是,GCC不能这样做。当我尝试调用typeid没有RTTI,我的程序会崩溃。我知道禁用RTTI不是标准的一部分,但无论如何我可以强制GCC对已知类型进行编译时解析吗?出于性能原因,RTTI被禁用。我不需要运行时RTTI。编辑:这就是我最终的结果:templateconstchar*TypeName(void);templateconstchar*Typ

c++ - 使用 GCC 编译没有 RTTI 的时间 typeid

有没有办法获得编译时间typeid来自禁用RTTI的GCC的信息?在VisualStudio下,像constchar*typeName=typeid(int).name();这样的简单命令将适本地返回“int”,即使RTTI被禁用。不幸的是,GCC不能这样做。当我尝试调用typeid没有RTTI,我的程序会崩溃。我知道禁用RTTI不是标准的一部分,但无论如何我可以强制GCC对已知类型进行编译时解析吗?出于性能原因,RTTI被禁用。我不需要运行时RTTI。编辑:这就是我最终的结果:templateconstchar*TypeName(void);templateconstchar*Typ

c++ - 相同的 typeid 名称但不是 std::is_same

使用C++(gcc4.8.3)我有2种类型(T1和T2),它们具有typeid(T1).name()的奇怪属性和typeid(T2).name()是一样的,但是std::is_same::value是false.怎么可能?我如何进一步调查以确定原因可能是什么? 最佳答案 忽略多态性,typeid()为您提供了一个表示表达式静态类型的对象。但是当涉及到表达式类型时,有些元素会被忽略。来自[expr]:Ifanexpressioninitiallyhasthetype“referencetoT”(8.3.2,8.5.3),thetype

c++ - 相同的 typeid 名称但不是 std::is_same

使用C++(gcc4.8.3)我有2种类型(T1和T2),它们具有typeid(T1).name()的奇怪属性和typeid(T2).name()是一样的,但是std::is_same::value是false.怎么可能?我如何进一步调查以确定原因可能是什么? 最佳答案 忽略多态性,typeid()为您提供了一个表示表达式静态类型的对象。但是当涉及到表达式类型时,有些元素会被忽略。来自[expr]:Ifanexpressioninitiallyhasthetype“referencetoT”(8.3.2,8.5.3),thetype