gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 22:56:29 24 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

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

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

简单。

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

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

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