积极答复者
struct的强制转换行为.

问题
-
C是不能对struct进行强制类型转换的. 刚才在VC++上做了实验, 发现一个奇怪的问题. 请看以下代码:
#include <iostream>
using namespace std;
typedef struct
{
int si;
} test_struct;
int main()
{
test_struct ts1={0};
test_struct& ts2 = (test_struct)ts1;
cout << &ts1 <<endl;
cout << &ts2 <<endl;
return 0;
}
在上面的代码中, 对结构体进行强制转换, 会产生一个副本. 这样ts1跟ts2将指向两个不同的地址.
这个结果是很让我吃惊的, 因为在印象中, 强制类型转换是不会改变地址, 也不会生成副本的.
我没有找到这种情况比较官方的说法(翻了一下primer也没找到), 不知道有没有高手指点一下出处在哪里..
PS:为了验证, 我在GCC上也做了测试, 发现同样的代码在GCC里面是编译不通过的. 说(test_struct)ts1不能赋值给引用
请各位高手帮忙解解疑惑, 非常感谢.