sách gpt4 ai đã đi

具有相同布局的不同类型之间的C++转换

In lại 作者:行者123 更新时间:2023-11-27 22:56:29 hai mươi bốn 4
mua khóa gpt4 Nike

如果我有两个定义相同的结构,那么在它们之间进行转换的最佳方式是什么?

struct A { int i; float f; };
struct B { int i; float f; };
void Func1(A);
void Func2(B);

Func2 需要通过获取B 参数并使其成为MỘT 来调用Func1。它看起来像:

void Func2(B b) { Func1( (A) b); } //Obviously invalid cast

虽然创建 MỘT 并单独复制成员是一种解决方案,但这种情况会在许多函数中的许多不同结构对中发生。不幸的是,修改MỘT,B hoặcFunc1 的定义是不可能的,Func2 的签名也是如此。

据我所知,结构MỘTB 在内存中的表示方式相同。在不违反严格别名等任何规定的情况下,在两个此类结构之间进行转换的最快方法是什么?

1 Câu trả lời

你可以投指针。但没有必要。由于您是按值传递的,因此您无论如何都需要创建一个正确类型的实例,所以就这样做

void f2( B b ) { f1( A{ b.i, b.f } ); }

简单。

当简单的类型安全代码可以满足您的需要时,不要考虑转换。

关于具有相同布局的不同类型之间的C++转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32545059/

hai mươi bốn 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com