【发布时间】:2010-11-05 14:19:24
【问题描述】:
!免责声明!:请注意,我说的是未标记声明。我知道这可能是一个非正式的术语,我的意思是声明不是 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 个警告。在线喜剧只接受第三个,第一个和第二个无法编译并带有诊断消息“声明没有声明任何内容”。如果在第二个中,匿名枚举包含至少一个枚举数,那么第二个被 comeau 编译器正确地接受。
如果 comeau 编译器是正确的,并且这是标准行为,那么我会发现其中有些不一致。我能理解为什么第一名应该被拒绝。我也会理解为什么第二个应该被拒绝(什么都不声明),但在这种情况下,第三个也应该被拒绝。如果不应该拒绝第三个,那么我看到的与第一个的唯一区别是匿名工会成员的范围是外部范围。但是枚举也是如此,所以,我的主张是应该接受第三个,然后应该接受第二个。
问题 2:
如果 comeau 是正确的,我在上述判断中遗漏了哪些考虑因素?
附注我已经写了一封电子邮件给 Comeau 支持。我会尽快发布他们的答案。
【问题讨论】:
标签: c++ anonymous-types language-lawyer