enumとインクリメント・デクリメント演算子 – プログラミング – Home

enumとインクリメント・デクリメント...
 
通知
すべてクリア

[解決済] enumとインクリメント・デクリメント演算子


enum
 enum
(@enum)
ゲスト
結合: 12年前
投稿: 2
Topic starter  

初歩的な質問で恐縮です。

enumで定義した値が連番になっているとき、この定数1を足したり引いたりすると
隣の値になる、ということは、どうすればできるのでしょうか。

enum X{A,B,C,D};と置いたときに

X x=A;
x++;

としてxをBにしようとしたのですが、++の箇所にて、

「Error:列挙された型でこの操作には、該当するユーザー定義演算子が必要です」

と出ました。
ユーザー定義演算子とは、どのように作るものなのでしょうか。

enumにした値はint型だと聞いているので、足したり引いたりできるはずですが、
どうも上手くいきません。

お忙しいとは存じますが、よろしくお願いします。


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

まず、enumはintではありません。
とれる値の範囲がintと同じなだけです。

次に、本来、enum型は「変化しない値」を意味するので、
++の様に「値が変化する演算はできない」わけですね。
従って、
 1.++したいのならenumでない型を使用する。又は
 2.enum型を使用したいなら、その型に対して
  値が変化する演算はしてはいけない。
ということになります。どちらかを選びましょう。

さて、とは言うもののデバッグ時など、一時的にenumに演算をしたい
場面も考えられます。こういった場合は、一旦int型に代入してから
(あえてキャストはお勧めしません)演算しましょう。


返信引用
ホウジョウウサギ
 ホウジョウウサギ
(@ホウジョウウサギ)
ゲスト
結合: 18年前
投稿: 73
 

++の結果がX型じゃなくてもいいのなら

int x = A;
x++;

にすればいいけど,
X型じゃないとダメな場合は

const X XArray[4] = { A,B,C,D };

for( int i=0; i<4; i++ )
{
X x = XArray[i];
...
}

みたいなことはたまにやる.


返信引用
enum
 enum
(@enum)
ゲスト
結合: 12年前
投稿: 2
Topic starter  

ご返答、ありがとうございます。

X x=A;

ではなく、

int x=A;

としました。
お騒がせ致しました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました