不同对象类型之间的C ++分配

时间:2013-04-24 17:34:48

标签: c++ class variable-assignment

我有一堆联合类(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

1 个答案:

答案 0 :(得分:4)

G ++是正确的。复制初始化的正式语法是 将表达式转换为=右侧的目标 输入,然后复制它。在这种情况下,假设是隐含的 从union_a转换为union_b。而且没有一个; 唯一的转换需要两个用户定义的转换, 并且永远不能在一个用户定义的转换中使用 明确的转换。

参见§8.5/ 16和§13.3.1.4(C ++ 11,但遵守这一规则的规则 关于早期版本没有改变)。