结构类型转换

时间:2011-02-16 07:52:00

标签: c++

给出以下代码:

struct A_struct
{
  int x;
};

struct B_struct
{
  int y;
};

int test(A_struct some_struct)
{
  return some_struct.x;
}

B_struct B;

有人可以解释这是什么类型的类型转换吗?

test((A_struct&)B);

这基本上等同于:

test(*(A_struct*)&B);

我很好奇它们是如何等同的,因为我很难找到填补空白的任何文本。

4 个答案:

答案 0 :(得分:4)

这是一个C风格的演员,允许你做一些非常糟糕的事情,这恰好在这个示例案例中起作用,因为两个完全不相关的结构的内存布局碰巧匹配。

不要这样做,除非你确切地知道你想要什么,这是如何在你使用的每个平台上实现它。

答案 1 :(得分:1)

在这种情况下,这应该等同于C ++ reinterpret_cast

<强> 5.2.10。 reinterpret_cast

  

T1类型的左值表达式可以是   强制转换为“引用T2”   如果是“指针”类型的表达式   T1“可以明确转换为   使用a的类型“T2指针”   reinterpret_cast的。这是一个   参考演员   reinterpret_cast<T&>(x)也一样   作为转换效果   *reinterpret_cast<T*>(&x)内置&amp;和*运营商。该   结果是一个引用的左值   与源左值相同的对象,   但是有不同的类型。没有   临时创建,没有副本   制造和建造者   或者不调用转换函数。

答案 2 :(得分:0)

test((A&)B);

不是有效的陈述。

虽然假设'B'是结构B的一个实例,但该语句会盲目地将对象B类型转换为对'A'类型对象的引用。

答案 3 :(得分:0)

这基本上等同于:

test((A*)&B);

几乎;-P

test(*(A*)&B);

(令人讨厌的东西!)