具有相同布局的不同类型之间的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++ - 我可以将参数传递给 SIGINT 吗?

C++ 应用程序 : How to properly delete/release an allocated object?

c++ - 文件映射 IPC 在 MapViewOfFile 调用时挂起

c++ - Visual Studio 2010 - 自定义生成工具

c++ - 使用 libxml2 库读取 xml

c++ - 复选框更改文本颜色

c++ - 如何在C++中获取嵌套类的实例

c++ - 为什么 std::getline() 在格式化提取后跳过输入?

c++ - 访问结构的char成员变量地址

c++ - Windows API 作业对象 : Don't pass on to grandchildren