根据经验,以下工作(gcc 和 VC++),但它是有效且可移植的代码吗?
typedef struct
{
int w[2];
} A;
struct B
{
int blah[2];
};
void my_func(B b)
{
using namespace std;
cout << b.blah[0] << b.blah[1] << endl;
}
int main(int argc, char* argv[])
{
using namespace std;
A a;
a.w[0] = 1;
a.w[1] = 2;
cout << a.w[0] << a.w[1] << endl;
// my_func(a); // compiler error, as expected
my_func(reinterpret_cast<B&>(a)); // reinterpret, magic?
my_func( *(B*)(&a) ); // is this equivalent?
return 0;
}
// Output:
// 12
// 12
// 12
- reinterpret_cast 有效吗?
- C风格的演员表是否等效?
- 目的是将位于的位
&a
解释为 B 类,这是有效/最佳方法吗?
(题外话:对于那些想知道我为什么要这样做的人,我正在处理两个需要 128 位内存的 C 库,并使用具有不同内部名称的结构 - 很像我示例中的结构。我不想要 memcopy,也不想在 3rd 方代码中乱窜。)