繁体   English   中英

匿名空的未标记的类,结构,联合和枚举

[英]anonymous empty untagged classes, structs, unions, and enums

!免责声明! :请注意,我在谈论无标记的声明。 我知道这是一个非正式的术语,我的意思是声明不是typedef而且它不声明匿名类型的对象。 在这些情况下,一切都很清楚。

问题1:
以下哪一项是一个结构良好的C ++程序? (多项选择)

//One
int main(){
   struct{}; //or class{}; should be the same
}
//Two  
int main(){
   enum{}; 
}
//Three
int main(){
   union{}; 
}

备注:
MSVC9.0接受这三个。 在第一,它发出警告。 在第二和第三位,我们得到0错误和0警告。 在线漫画仅接受第三,第一和第二,无法编译诊断消息“声明不声明任何内容”。 如果在第二个中,匿名枚举包含至少一个枚举器,则getau编译器正确地接受第二个枚举。

如果comeau编译器是正确的,这是标准行为,那么我看到它有些不一致。 我能理解为什么第一名应该被拒绝。 我也理解为什么第二号应该被拒绝(没有声明),但在这种情况下,第三号也应该被拒绝。 如果第三个不应该被拒绝,那么我在第一个看到的唯一区别是,一个无趣的联盟成员的范围是外部范围。 但是枚举的情况也是如此,因此,我的主张是,如果第三个被接受,那么第二个应该被接受。

问题2:
如果考虑是正确的,我在上述判断中缺少哪些考虑因素?

PS我已经写了一封电子邮件给了我的支持。 我会在收到答案后立即发布答案。

这些都不合法。 见[dcl.dcl]第3段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM