2

我们有一些代码大致如下所示:

// 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 可能会这样对待它们。

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

4

2 回答 2

4

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

于 2009-07-02T12:08:50.973 回答
0

我不确定以这种方式返回枚举而不是类型定义的枚举是否被视为标准,但我可能是错的。另外,作为 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);
于 2009-07-02T12:09:16.527 回答