给出以下代码:
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);
我很好奇它们是如何等同的,因为我很难找到填补空白的任何文本。
答案 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);
(令人讨厌的东西!)