enum int
enumからint
C言語
暗黙的に変換可能です。
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <stdio.h> enum example {A, B, C}; int main(void) { int num = A; printf("%d\n", num); return 0; } |
1 2 |
$ ./a.out 0 |
C++
C言語と同じです。
ただし、enumの中身をlongとかcharとかint型以外として宣言している場合はintに変換するときにwarningが出るかもしれない。
(enumにint以外を持てるのはC++11以降のみ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> enum example : char { A = 'A', B = 'B', C = 'C', }; int main() { char c = A; std::cout << c << std::endl; return 0; } |
1 2 |
$ ./a.out A |
C#
C++11と同じくC言語とほぼ同じで、int型以外も持てる。
ただし、暗黙的な型変換ができない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; namespace Test { class MainClass { enum Example { A, B, C, } public static void Main(string[] args) { int num = (int)Example.A; Console.WriteLine(num); } } } |
1 2 |
$ mono ./test.exe 0 |
Java
JavaのenumはCのenumとは大きく異なり、「enumみたいなことができるクラス」と化している。
enumからintに変換するにはenum#ordinalメソッドを使わないといけない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.io.*; class Main { enum Example { A, B, C, } static public void main(String[] args) { int num = Example.A.ordinal(); System.out.println(num); } } |
1 2 |
$ java Main 0 |
intからenum
C言語
intからenumに変換するのは、enumに挙げられていないでたらめな数値を代入できるので、明示的にキャストしないといけない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include <stdio.h> enum example {A, B, C}; int main(void) { int num; enum example e_num; printf("A: 0\n" "B: 1\n" "C: 2\n" "数字を入力してください。:"); scanf("%d", &num); e_num = (enum example)num; switch (e_num) { case A: printf("A\n"); break; case B: printf("B\n"); break; case C: printf("C\n"); break; default: printf("?\n"); break; } return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ ./a.out A: 0 B: 1 C: 2 数字を入力してください。:0 A $ ./a.out A: 0 B: 1 C: 2 数字を入力してください。:1 B $ ./a.out A: 0 B: 1 C: 2 数字を入力してください。:2 C $ ./a.out A: 0 B: 1 C: 2 数字を入力してください。:4 ? |
C++
C言語と全く同じ。
ただし、キャストの際にはstatic_cast
を使うのが普通。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include <iostream> enum example {A, B, C}; int main() { int num; example e_num; std::cout << "A: 0" << std::endl << "B: 1" << std::endl << "C: 2" << std::endl << "数字を入力してください。:"; std::cin >> num; e_num = static_cast<example>(num); switch (e_num) { case A: std::cout << "A" << std::endl; break; case B: std::cout << "B" << std::endl; break; case C: std::cout << "C" << std::endl; break; default: std::cout << "?" << std::endl; break; } return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ ./a.out A: 0 B: 1 C: 2 数字を入力してください。:0 A $ ./a.out A: 0 B: 1 C: 2 数字を入力してください。:1 B $ ./a.out A: 0 B: 1 C: 2 数字を入力してください。:2 C $ ./a.out A: 0 B: 1 C: 2 数字を入力してください。:4 ? |
C#
Cと同じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
using System; namespace Test { class MainClass { enum Example { A, B, C, } public static void Main(string[] args) { int num; Example eNum; Console.Write("A: 0" + Environment.NewLine + "B: 1" + Environment.NewLine + "C: 2" + Environment.NewLine + "数字を入力してください。:"); try { num = Convert.ToInt32(Console.ReadLine()); } catch (System.FormatException) { return; } eNum = (Example)num; switch (eNum) { case Example.A: Console.WriteLine("A"); break; case Example.B: Console.WriteLine("B"); break; case Example.C: Console.WriteLine("C"); break; default: Console.WriteLine("?"); break; } } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ mono ./test.exe A: 0 B: 1 C: 2 数字を入力してください。:0 A $ mono ./test.exe A: 0 B: 1 C: 2 数字を入力してください。:1 B $ mono ./test.exe A: 0 B: 1 C: 2 数字を入力してください。:2 C $ mono ./test.exe A: 0 B: 1 C: 2 数字を入力してください。:4 ? |
Java
enum#valuesメソッドでenumに挙げられている値の一覧を取得し、その配列の要素数でintからenumに変換できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
import java.io.*; class Main { enum Example { A, B, C, } static public void main(String[] args) { int num; Example eNum; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.print("A: 0\n" + "B: 1\n" + "C: 2\n" + "数字を入力してください。:"); try { num = Integer.parseInt(reader.readLine()); } catch (java.io.IOException e) { return; } catch (java.lang.NumberFormatException e) { return; } try { eNum = Example.values()[num]; } catch (java.lang.IndexOutOfBoundsException e) { System.out.println("?"); return; } switch (eNum) { case A: System.out.println("A"); break; case B: System.out.println("B"); break; case C: System.out.println("C"); break; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ java Main A: 0 B: 1 C: 2 数字を入力してください。:0 A $ java Main A: 0 B: 1 C: 2 数字を入力してください。:1 B $ java Main A: 0 B: 1 C: 2 数字を入力してください。:2 C $ java Main A: 0 B: 1 C: 2 数字を入力してください。:4 ? |