ISO文件中的一点:基于匿名联合 > ISO C++标准:第9.5节,第4节,第1行:< /P> "A union for which objects or pointers are declared is not an anonymous union."

ISO文件中的一点:基于匿名联合 > ISO C++标准:第9.5节,第4节,第1行:< /P> "A union for which objects or pointers are declared is not an anonymous union.",c++,class,c++11,unions,C++,Class,C++11,Unions,例如: struct X { union { int i; double d; } ; int f () { return i;} }; int main() { return 0; } 根据上面的观点,我认为这个例子会有错误 但GCC、SUN编译器CC、EDG等都没有显示错误 iam预期出现此错误//错误:无法直接访问“i” 请..确认上面的

例如:

 struct X {
        union {
               int i;
               double d;
             } ;
        int f () { return i;}      
       };
   int main() { return 0; }
根据上面的观点,我认为这个例子会有错误

但GCC、SUN编译器CC、EDG等都没有显示错误

iam预期出现此错误//错误:无法直接访问“i”


请..确认上面的示例程序是否正确,是否错误

这将使工会不是匿名的:

struct X {
    union {
        int i;
        double d;
    } *p;
    int f () { return i;}      // !Nyet.
};

欢呼和Hth.[/P>< P> >阿尔夫的话,C++规范中匿名联盟语言的目的是允许联盟成员的范围。如果在结构中有命名的并集:

struct X {
    union {
        int i;
        double d;
    } varname;
};
i
不是struct X的成员。
i
varname
的成员,varname本身就是struct
X
的成员

但是,如果该联合没有声明成员变量,则必须作为
X
的成员直接访问
i
。只有当联合没有名称时(没有使用联合定义声明变量),这才有效。这种工会被称为“匿名工会”