如果我有两个定义相同的结构,那么在它们之间进行转换的最佳方式是什么?
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
并单独复制成员是一种解决方案,但这种情况会在许多函数中的许多不同结构对中发生。不幸的是,修改A
、B
或Func1
的定义是不可能的,Func2
的签名也是如此。
据我所知,结构A
和B
在内存中的表示方式相同。在不违反严格别名等任何规定的情况下,在两个此类结构之间进行转换的最快方法是什么?
最佳答案
你可以投指针。但没有必要。由于您是按值传递的,因此您无论如何都需要创建一个正确类型的实例,所以就这样做
void f2( B b ) { f1( A{ b.i, b.f } ); }
简单。
当简单的类型安全代码可以满足您的需要时,不要考虑转换。
关于具有相同布局的不同类型之间的C++转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32545059/