#include <iostream>#include <typeinfo>class D { virtual ~D() {}};extern D d;int main(){ std::cout << typeID(d).name() << std::endl; std::cout << sizeof(d) << std::endl;}
使用clang 3.4,我收到链接错误:
undefined reference to `d’
但是在g++ 4.8.1,它运作良好,我得到了结果:
1D
8
我的问题:
>哪一个是对的?
> g如何实现typeID?如何在没有定义的情况下从多态对象中获取信息?
a) If Expression is a glvalue Expression that IDentifIEs an object of a polymorphic type (that is,a class that declares or inherits at least one virtual function),the
typeID
Expression evaluates the Expression and then refers to thestd::type_info
object that represents the dynamic type of the Expression. If the result of the evaluated Expression is a null pointer,an exception of typestd::bad_typeID
or a type derived fromstd::bad_typeID
is thrown.
听起来像clang 3.4是对的.
更新
标准说:
When
typeID
is applIEd to a glvalue Expression whose type is a polymorphic class type (10.3),the result refers to astd::type_info
object representing the type of the most derived object (1.8) (that is,the dynamic type) to which the glvalue refers. If the glvalue Expression is obtained by applying the unary * operator to a pointer and the pointer is a null pointer value (4.10),the typeID Expression throws thestd::bad_typeID
exception (18.7.3).
它与cppreference.com使用的语言略有不同,但仍然指出clang 3.4是正确的.
总结以上是内存溢出为你收集整理的c – 在多态对象上使用typeid时,是否必须定义它?全部内容,希望文章能够帮你解决c – 在多态对象上使用typeid时,是否必须定义它?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)