首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何理解兼容类型与严格的别名规则?

如何理解兼容类型与严格的别名规则?

提问于 2018-03-16 04:44:33
回答 1关注 0查看 156

C中的一种常见策略是将一种类型转换为另一种类型,这取决于C结构的布局有一定的保证。

像GLib这样的库依靠这个实现面向对象的继承,基本上:

代码语言:javascript
复制
struct Base
{
  int x;
  int y;
};

struct Derived
{
  struct Base b;
  int z;
};

这使得Base*指针能够被分配给Derived对象的地址。但我也意识到“ 严格别名 ”规则,这是编译器隐含的假设,即不同类型的指针不能指向相同的地址。(这使编译器能够执行某些优化。)

那么,这两件事情是如何协调的呢?许多C库,包括Glib,CPython等,都使用上述策略在类型之间进行转换。他们都只是简单地编译像no-strict-aliasing

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档