Arm*_*yan 6 c++ anonymous-types language-lawyer
!免责声明!:请注意,我在谈论无标记的声明.我知道这是一个非正式的术语,我的意思是声明不是typedef而且它不声明匿名类型的对象.在这些情况下,一切都很清楚.
问题1:
以下哪一项是格式良好的C++程序?(多项选择)
//One
int main(){
struct{}; //or class{}; should be the same
}
//Two
int main(){
enum{};
}
//Three
int main(){
union{};
}
Run Code Online (Sandbox Code Playgroud)
备注:
MSVC9.0接受全部三个.在第一,它发出警告.在第二和第三位,我们得到0错误和0警告.在线漫画只接受三号,第一和第二号无法编译,并带有诊断消息"声明未声明任何内容".如果在第二个中,匿名枚举包含至少一个枚举器,则getau编译器正确地接受第二个枚举.
如果comeau编译器是正确的,这是标准行为,那么我看到它有些不一致.我能理解为什么第一名应该被拒绝.我也理解为什么第二号应该被拒绝(没有声明),但在这种情况下,第三号也应该被拒绝.如果第三个不应该被拒绝,那么我在第一个看到的唯一区别是,一个无趣的联盟成员的范围是外部范围.但是枚举的情况也是如此,因此,我的主张是,如果第三个被接受,那么第二个应该被接受.
问题2:
如果结果是正确的,我在上述判断中缺少哪些考虑因素?
PS我已经写了一封电子邮件给了我的支持.我会在收到答案后立即发布答案.
| 归档时间: |
|
| 查看次数: |
600 次 |
| 最近记录: |