本文介绍了C++ 类或结构与 C 结构的兼容性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!
问题描述
是否可以编写一个与C struct 完全兼容的C++ 类或结构.从兼容性我的意思是对象的大小和变量的内存位置.我知道使用 *(point*)&pnt
甚至 (float*)&pnt
(在变量是浮点数的不同情况下)是邪恶的,但请考虑出于性能考虑,它确实需要.每秒使用百万次常规类型转换运算符是不合逻辑的.
Is it possible to write a C++ class or struct that is fully compatible with C struct. From compatibility I mean size of the object and memory locations of the variables. I know that its evil to use *(point*)&pnt
or even (float*)&pnt
(on a different case where variables are floats) but consider that its really required for the performance sake. Its not logical to use regular type casting operator million times per second.
举个例子
C 版本是一个 POD 结构
C version is a POD struct
推荐答案
是.
- 在两种语言中以相同的顺序使用相同的类型
- 确保类中没有任何虚拟对象(这样您就不会在前面卡住 vtable 指针)
- 根据所使用的编译器,您可能需要调整结构包装(通常使用编译指示)以确保兼容性.
(编辑)
- 此外,您必须注意使用编译器检查类型的 sizeof().例如,我遇到过一个编译器将 short 存储为 32 位值(当大多数将使用 16 位值时).更常见的情况是 int 在 32 位架构上通常为 32 位,而在 64 位架构上通常为 64 位.
这篇关于C++ 类或结构与 C 结构的兼容性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!
本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!