我有一堆联合类(union_a,union_b,...),都有相同的数据成员和 不同的成员职能。 我希望能够将任何类的对象分配给任何其他类的对象,并且 在任何ctor for init中使用它。 “work”union union_z用作调解器。 在VC中一切正常。 在GC中,最后一行得到“错误:从'union_a'转换为非标量类型'union_b'请求”。
如果可以,请帮帮我,我...
union union_z{int m;};
union union_a{
int m;
union_a(){}
union_a(union_z x){m = x.m;}
void operator=(union_z x){m = x.m;}
operator union_z(){return *(union_z *)this;}
};
union union_b{
int m;
union_b(){}
union_b(union_z x){m = x.m;}
void operator=(union_z x){m = x.m;}
operator union_z(){return *(union_z *)this;}
};
union_a a;
union_b b(a);
b = a;
union_b b1 = a; //error: conversion from ‘union_a’ to non-scalar type ‘union_b’ requested
答案 0 :(得分:4)
G ++是正确的。复制初始化的正式语法是
将表达式转换为=
右侧的目标
输入,然后复制它。在这种情况下,假设是隐含的
从union_a
转换为union_b
。而且没有一个;
唯一的转换需要两个用户定义的转换,
并且永远不能在一个用户定义的转换中使用
明确的转换。
参见§8.5/ 16和§13.3.1.4(C ++ 11,但遵守这一规则的规则 关于早期版本没有改变)。