dal*_*lle 10 c++ compiler-construction language-design rtti typeid
Andrei Alexandrescu在Modern C++ Design中写道:
返回的对象
typeid具有静态存储,因此您不必担心生命周期问题.
安德烈继续说:
标准并不保证每次调用都会
typeid(int)返回对同一type_info对象的引用 .
即使标准不能保证这一点,如何在常见的编译器中实现,例如GCC和Visual Studio?
假设typeid没有泄漏(并且每次调用都返回一个新实例),每个应用程序,每个翻译单元,每个dll/so或者完全不同的东西,它是一个"表"吗?
有时间&typeid(T) != &typeid(T)吗?
我主要对Windows的编译器感兴趣,但是对于Linux和其他平台的任何信息也很感激.
Art*_*yom 10
是否有&typeid(T)!=&typeid(T)的时间?
我主要对Windows的编译器感兴趣,但是对于Linux和其他平台的任何信息也很感激.
是.在windows下DLL不能有未解析的符号,因此.如果你有:
foo.h中
struct foo { virtual ~foo() {} };
Run Code Online (Sandbox Code Playgroud)
dll.cpp
#include "foo.h"
...
foo f;
cout << &typeid(&f) << endl
Run Code Online (Sandbox Code Playgroud)
main.cpp中
#include "foo.h"
...
foo f;
cout << &typeid(&f) << endl
Run Code Online (Sandbox Code Playgroud)
会给你不同的指针.因为在加载dll之前,typeid(foo)应该同时存在于dll和primary exe中
更重要的是,在Linux下,如果主可执行文件未使用-rdynamic(或--export-dynamic)编译,则typeid将被解析为可执行文件和共享对象中的不同符号(通常不会在ELF平台下发生),因为链接可执行文件时执行的一些优化 - 删除不必要的符号.
| 归档时间: |
|
| 查看次数: |
2893 次 |
| 最近记录: |