gpt4 book ai didi

C++ 类或结构与 C 结构的兼容性

转载 作者:太空狗 更新时间:2023-10-29 23:19:58 26 4
gpt4 key购买 nike

是否可以编写与 C 结构完全兼容的 C++ 类或结构。从兼容性我的意思是对象的大小和变量的内存位置。我知道使用 *(point*)&pnt 甚至 (float*)&pnt (在变量是 float 的不同情况下)是邪恶的,但考虑到它确实需要为了性能。每秒使用一百万次常规类型转换运算符是不合逻辑的。

举个例子

Class Point {
long x,y;
Point(long x, long y) {
this->x=x;
this->y=y;
}

float Distance(Point &point) {
return ....;
}
};

C 版本是一个 POD 结构

struct point {
long x,y;
};

最佳答案

最干净的做法是从 C 结构继承:

struct point
{
long x, y;
};

class Point : public struct point
{
public:
Point(long x, long y)
{ this->x=x; this->y=y; }

float Distance(Point &point)
{ return ....; }
}

C++ 编译器保证 C 风格的结构点与 C 编译器具有相同的布局。 C++ 类 Point 为其基类部分继承了此布局(并且由于它不添加任何数据或虚拟成员,因此它将具有相同的布局)。指向类 Point 的指针将在没有转换的情况下转换为指向 struct point 的指针,因为始终支持转换为基类指针。因此,您可以使用类 Point 对象并自由地将指向它们的指针传递给需要指向结构点指针的 C 函数。

当然,如果已经有一个定义struct point的C头文件,那么你可以只包含这个而不是重复定义。

关于C++ 类或结构与 C 结构的兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5289826/

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