两个枚举的过载分辨率

时间:2009-07-02 12:00:09

标签: c++ enums lint

我们有一些看起来像这样的代码:

// Two enums that differ entirely.
enum A { a1, a2 };
enum B { b1, b2 };

// Functions to convert in some meaningful way between them
A convert(B);
B convert(A);

现在,我们的编译器完全符合我们的预期。 convert(a1)会致电B convert(A),依此类推。但是,当我们使用Lint查看我们的代码时,它会抱怨错误31.我们怀疑这是因为枚举的基础整数类型是相同的,因此Lint可能会这样对待它们。

我的问题是:是代码标准,还是意外使用编译器功能?

2 个答案:

答案 0 :(得分:4)

此代码是标准且正确的。该错误在LINT

答案 1 :(得分:0)

我不确定以这种方式返回enum而不是typedef'dum将被视为标准,但我可能是错的。另外,作为C程序员,我会避免对这两个函数使用相同的名称(因为重载是不可能的),但我倾向于在C ++中避免使用它,因为它很容易出错。

如果我正在编写此代码,我会有类似的内容:

typedef enum { a1, a2 } A;
typedef enum { b1, b2 } B;
A convertBToA(B BInstance);
B convertAToB(A AInstance);

但是,我希望Lint能够(在C ++中)很高兴:

typedef enum { a1, a2 } A;
typedef enum { b1, b2 } B;
A convert(B BInstance);
B convert(A AInstance);