gpt4 book ai didi

c++ - 在 C++ 中混合 RTTI 标志

转载 作者:可可西里 更新时间:2023-11-01 17:52:52 26 4
gpt4 key购买 nike

如果我在 C++ 中有多个链接的 C++ 静态链接库,如果它们是使用不同的启用/禁用运行时类型信息 (RTTI) 值编译的,它们是否可以共享(传入和传出函数)类对象?

--编辑:感谢您的回复,我担心的具体事情是1. 启用 RTTI 是否会改变静态(非多态类型)的 sizeof 行为?

并且,2. 如果我在支持 RTTI 的库中创建一个类并将其传递给另一个不支持 RTTI 的库,虚拟方法是否正常工作。 (反之亦然)

最后3. 如果我在支持 RTTI 的库中创建一个类,我希望能够对其使用 dynamic_cast,如果我将该对象传递给不支持 RTTI 的库,我是否仍可以在那个 对象。 ...我假设不会,而且这似乎是个坏主意...我只是好奇。

最佳答案

如何存储 RTTI 信息是一个实现细节,因此不能跨不同的编译器移植。

此外,大多数编译器甚至不保证使用不同标志编译的对象将为其方法使用相同的 ABI。这在发布和调试库中表现得最为突出,但其他标志也可能导致差异。

不仅函数/方法的 ABI 可能会发生变化,而且标志会影响编译器在结构中的元素之间使用的填充,因此即使没有虚拟方法的对象在使用不同的标志编译时也可能不兼容。

当使用大多数 IDS 时,您可以看到效果。调试/发布二进制文件构建到单独的目录中,并且仅链接到相同类型的二进制文件(而且任何用户定义的构建都将构建到单独的唯一目录中,因为标志的差异可能导致不兼容)。如果您在构建中更改某些标志,那么整个项目通常会被迫重新构建。

关于c++ - 在 C++ 中混合 RTTI 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1490593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com