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

标签 c++

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

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/

相关文章:

c++ - 当我将它初始化为 -1 时,为什么我的数组会被填充为零

c++ - 查找十六进制字符串是 utf-8 还是 utf-16

c++ - 类似文件夹树浏览器的 Windows 资源管理器

c++ - 从 QFileDialog 库在窗口中移动小部件

c++ - ifstream 找不到文件?

c++ - 如何获取文件名

c++ - 为我的项目中的库链接 libunwind 时出现链接器错误

c++ - 在不转换对象的情况下调用子类方法

c++ - std::atomic<std::string> 是否正常工作?

c++ - 我可以做些什么来提高内存搜索速度?