C++ 不同对象类型之间的赋值

标签 c++ class variable-assignment

我有一堆 union 类(union_a, union_b, ...),都具有相同的数据成员和 不同的成员函数。 我希望能够将任何类的对象分配给任何其他类的对象,并且 在任何 ctor 中使用它进行初始化。 “工作” 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

最佳答案

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

参见 §8.5/16 和 §13.3.1.4(C++11,但与此相关的规则 与早期版本相比没有变化)。

关于C++ 不同对象类型之间的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198600/

相关文章:

c++ - 将数字写入文件而不是读取它们的最佳解决方案是什么?

c++ - 使用 QGraphicsView 时小部件背景不透明但使用 QGridLayout 时透明

python - 一次分配多个变量,Python

class - 在Groovy中分配对象属性的简便方法?

powershell - 将变量串在一起以清除它们是否可以?

c++ - 使用boost库查找交点

c++ - 为什么 main 前面有一个 int,为什么我的教授可以排除它?

ios - 在一个 ViewController 中创建类的实例并使用它在另一个中显示数据

c++ - 我应该在类里面使用 `this` 吗?

python - 如何在 Python 中访问全局变量?