C++ C+中的Typedef枚举声明+;

C++ C+中的Typedef枚举声明+;,c++,enums,typedef,C++,Enums,Typedef,我的问题很简单。 在C++中,在下面的声明中推迟TyWIFF是合法的吗?gcc毫无问题地接受代码,但这是一种不推荐的方式吗?我之所以问这个问题,是因为我每次都会在指令的开头找到带有typedef的示例 enum _mytype { A=1, B=2 } typedef mytype; typedef X Y 及 X类型定义Y 只是在C++中编写完全相同的东西的两种方法。两者都不是不推荐的,只是第一个更常用,可能是因为您可以将其读作“typedef X as Y”。在C语言中,

我的问题很简单。 在C++中,在下面的声明中推迟TyWIFF是合法的吗?gcc毫无问题地接受代码,但这是一种不推荐的方式吗?我之所以问这个问题,是因为我每次都会在指令的开头找到带有typedef的示例

enum _mytype {   
 A=1,   
 B=2 
} typedef mytype;

typedef X Y

X类型定义Y

只是在C++中编写完全相同的东西的两种方法。两者都不是不推荐的,只是第一个更常用,可能是因为您可以将其读作“typedef X as Y”。

在C语言中,您经常使用

typedef enum 
{
} what_ever;

因为在C中,“enum what_ever”将定义一个类型“enum what_ever”,而不是“what_ever”。然而,在C++中,这不是事实,而且除了向后兼容性原因,在编写C++(./p>+ 1)时,在这种情况下不应该使用TyPulf。我曾经用后一种方式来激怒我的一位同事,他有一个讨厌的习惯,就是在他的代码上使用1个空格的缩进,同时修改我已经使用4个空格的代码。@Study472:你们都应该使用制表符缩进。空格缩进是一个令人讨厌的习惯。@LightnessRacesinOrbit Blargh。这取决于您是否喜欢跨编辑器的一致性。希望我们能同意,至少制表符除了左缩进(而不是像对齐一堆变量名那样)之外对任何东西都不好,因为后者会对代码的格式造成严重破坏,除非整个团队对表示制表符的空格数进行标准化。请注意,后一种形式在C中不受欢迎。在C中(但在C++中不受欢迎),
typedef
被视为存储类,不推荐将存储类作为第一个元素放置。(弃权也不在C++中)。@ 0A0D:但是你不会有8个空间标签。那太可笑了。如果代码使用标签,那么您可以选择屏幕/窗口/显示器/眼睛/大脑的宽度。如果有人使用了空格,则不能使用。这就是重点。最后,我将通过引用和尊重的方式来引用我之前的评论,并建议让它成为今天的方式。这是合法的C++语法(语法上,<代码> TyPufF是<代码> DECSENE-SEQ ->声明->块声明>简单声明> DECL规范SEQ-> DECL规范< /代码>但我不确定语义是否定义得很好。你意识到这种类型的TyPulf约定在C++中过时了吗?不再有任何像typedef st_foo{…}foo这样的诱惑;在C++中,因为它不是短的处理任何东西:我们可以用“结构”Foo写“Fo”。同样,不需要像typedef en_foo{…}foo这样的东西;出于同样的原因。事实上,根据BUFB aka Expert C Programming,用typedefs隐藏“struct”或“enum”甚至不是推荐的C约定。使用以下划线开头的标识符不是一个好主意。在C中,
typedef
被视为存储类说明符(仅为语法方便),将存储类说明符放置在声明的开头之外是一个过时的特性。我认为C++中没有类似的语句,这是最令人困惑的语法。您正在保存一行。加上你的变量名很臭(_mytypevs mytype)。为什么不省去麻烦,给枚举一个合适的名称,比如
ABList
,这样就不需要typedef了。我唯一一次使用typedef是在编译器不支持的类型上,或者在向量声明上,比如:
typedef-vector-PolygonColl
,所以我不必在方法参数中使用
vector
,我可以只使用
polygons
。我想你应该再读一遍这个问题;我想你根本没有回答。