给定以下内容:
typedef struct{
...
...
} A;
typedef struct{
...
...
} B;
typedef union __attribute__((transparent_union)) {
A a;
B b;
} C;
如果我声明一个函数
myMethod(C){
...
}
没有明确的强制转换,以下内容是合法的:
A myA;
B myB;
meMethod(myA);
myMethod(myB);
(来自:“c unions and polymorphism”)
但是,为什么不允许以下内容:
C cArray[2];
c[0]=myA;
c[1]=myB;
这给出了不兼容的类型错误,而没有显式的强制转换。有什么方法可以避免显式强制转换?
最佳答案
GCC documentation指出:
换句话说,透明性仅适用于功能参数。
关于arrays - 数组中的C联合多态性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10722647/