!免责声明!:请注意,我说的是未标记声明。我知道这可能是一个非正式术语,我的意思是声明不是 typedef 并且它不声明匿名类型的对象。在这些情况下,一切都很清楚。
问题一:
以下哪个是格式正确的 C++ 程序? (多选)
//One
int main(){
struct{}; //or class{}; should be the same
}
//Two
int main(){
enum{};
}
//Three
int main(){
union{};
}
备注:
MSVC9.0 接受所有这三个。在第一位,它给出了警告。在第二和第三,我们得到 0 个错误和 0 个警告。在线 comeau 仅接受三号,一号和二号无法编译,并显示诊断消息“声明未声明任何内容”。如果在第二种情况下,匿名枚举至少包含一个枚举器,则第二种被 comeau 编译器正确接受。
如果 comeau 编译器是正确的,并且这是标准行为,那么我会发现其中存在一些不一致之处。我能理解为什么要拒绝第一条。我也会理解为什么第二个应该被拒绝(什么都不声明),但在这种情况下,第三个也应该被拒绝。如果第三个不应该被拒绝,那么我看到的与第一个的唯一区别是匿名联盟成员的范围是外部范围。但枚举也是如此,所以,我的主张是,如果第三个被接受,那么第二个也应该被接受。
问题二:
如果 comeau 是正确的,我在上述判断中遗漏了哪些考虑因素?
附言我已经写了一封电子邮件给 comeau 支持。我会在收到答案后立即发布。
最佳答案
这些都不合法。参见 [dcl.dcl] 第 3 段。
关于c++ - 匿名空无标记类、结构、 union 和枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106718/