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

このように typedef された列挙型ではなく列挙型を返すことが標準と見なされるかどうかはわかりませんが、間違っている可能性があります。また、C プログラマーとして、2 つの関数に同じ名前を使用することは避けますが (オーバーロードが不可能であるため)、間違いを犯しやすいため、とにかく 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 に答える