When can typeid return different type_info instances for same type?

前端 未结 2 1710
感情败类
感情败类 2020-12-06 11:28

Andrei Alexandrescu writes in Modern C++ Design:

The objects returned by typeid have static storage, so you don\'t have to worry abou

2条回答
  •  萌比男神i
    2020-12-06 12:27

    Are there times when &typeid(T) != &typeid(T)?

    I'm mainly interested in compilers for Windows, but any information for Linux and other platforms is also appreciated.

    Yes. Under windows DLL can't have unresolved symbols, thus. If you have:

    foo.h

    struct foo { virtual ~foo() {} };
    

    dll.cpp

    #include "foo.h"
    ...
    foo f;
    cout << &typeid(&f) << endl
    

    main.cpp

    #include "foo.h"
    ...
    foo f;
    cout << &typeid(&f) << endl
    

    Would give you different pointers. Because before dll was loaded typeid(foo) should exist in both dll and primary exe

    More then that, under Linux, if main executable was not compiled with -rdynamic (or --export-dynamic) then typeid would be resolved to different symbols in executable and in shared object (which usually does not happen under ELF platforms) because of some optimizations done when linking executable -- removal of unnecessary symbols.

提交回复
热议问题