将原始类型的typedef改为另一种原始类型是有效的C ++吗?
typedef int long;
在VS 2012上,发出了警告但编译得很好。
警告C4091:'typedef':未声明变量时在'long'左侧被忽略
但是在gcc-4.3.4上,它失败了。
错误:声明不会声明任何内容。
哪种编译器符合标准?
PS:我不会在生产代码中写这样的东西。刚想出来并想一想。
答案 0 :(得分:7)
它是否有效C ++
没有。 C ++ 11,§7.1.3.6:
在给定范围内,不得使用typedef规范来重新定义在该范围内声明的任何类型的名称,以引用不同类型。
答案 1 :(得分:5)
他们都说同样的话,但有人报告说这是一个错误。请注意,VS警告说“typedef被忽略了”。问题是int long
和long int
是同义词,因此您基本上是在typedef
创建一个未命名的long
。
答案 2 :(得分:2)
两者都符合标准要求。该typedef无效,两个编译器都会发出诊断信息。