具有相同布局的不同类型之间的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++ - 状态机实现

c++ - 头文件包含函数体,会导致重复定义吗?

c++ - 循环不在 C++ 函数中执行

c++ - 在 Visual Studio 2008 中使用 Boost 时出错

c++ - 使用std::multimap时c++发生运行时错误的机会很小

c++ - 存取错误的问题(下方附有程式码)

c++ - 高级和低级编程语言之间的关系

C++——typedef "inside"模板参数?

c++ - 如何将这个工厂逻辑保存在一个地方?

C++ - 错误 : multiple types in one declaration