如果我有多个挂在C++ C++静态链接库,是他们有可能共享(传入和传出函数)类的对象,如果他们在编译时使用不同的启用/禁用运行时类型信息(RTTI)值?
--edit:感谢您的回复,我担心的具体事情是1.启用RTTI是否会改变sizeof对静态(非多态类型)的行为?
2,如果我在启用RTTI的库中创建一个类并将其传递给另一个非RTTI启用的库,虚拟方法是否正常工作.(反之亦然)
,最后如果我在启用RTTI库中创建一个类,我希望能够用dynamic_cast的它,如果我通过那个对象非RTTI启用库,我仍然可以使用它在那个对象.......我不会这样认为,无论如何这似乎是一个坏主意......我只是好奇.
RTTI信息的存储方式是一个实现细节,因此不能在不同的编译器中移植.
此外,大多数编译器甚至不保证使用不同标志编译的对象将对那些方法使用相同的ABI.这最常见于发布和调试库,但其他标志也可能导致差异.
函数/方法的ABI不仅可以改变,而且标志可以影响编译器在结构中的元素之间使用的填充,因此即使没有虚拟方法的对象在使用不同的标志编译时也可能是不兼容的.
使用大多数IDS时,您可以看到效果.调试/发布二进制文件内置于单独的目录中,并且仅链接到相同类型的二进制文件(任何用户定义的构建都将构建到单独的唯一目录中,因为标志的差异可能导致不兼容).如果更改构建中的某些标志,则通常会强制整个项目重新构建.