回答編集履歴
2
ビットフラグについて追記
test
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
|
19
|
-
少々コードが長くなることがあります。
|
19
|
+
●少々コードが長くなることがあります。
|
20
20
|
|
21
21
|
```cpp
|
22
22
|
|
@@ -56,6 +56,36 @@
|
|
56
56
|
|
57
57
|
|
58
58
|
|
59
|
+
●enum classでは簡単に整数演算ができないので、ビットフラグを表現するのは現実的ではありません。
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
```cpp
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
enum class FooFlags {
|
68
|
+
|
69
|
+
kFlag1 = 1 << 0,
|
70
|
+
|
71
|
+
kFlag2 = 1 << 1,
|
72
|
+
|
73
|
+
kFlag3 = 1 << 2,
|
74
|
+
|
75
|
+
};
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
FooFlags flags = ...;
|
80
|
+
|
81
|
+
if (flags & FooFLags::kFlag2) { // できない
|
82
|
+
|
83
|
+
```
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
59
89
|
> (3) enum classを使うことでenumより速度が落ちるなどあるのでしょうか? (プリプロセッサーが捌く範囲で関係ないでしょうか?)
|
60
90
|
|
61
91
|
|
1
文言
test
CHANGED
@@ -26,9 +26,9 @@
|
|
26
26
|
|
27
27
|
enum Type {
|
28
28
|
|
29
|
-
k
|
29
|
+
kApple,
|
30
30
|
|
31
|
-
k
|
31
|
+
kOrange
|
32
32
|
|
33
33
|
};
|
34
34
|
|
@@ -40,9 +40,9 @@
|
|
40
40
|
|
41
41
|
enum class Type {
|
42
42
|
|
43
|
-
k
|
43
|
+
kApple,
|
44
44
|
|
45
|
-
k
|
45
|
+
kOrange,
|
46
46
|
|
47
47
|
};
|
48
48
|
|
@@ -50,7 +50,9 @@
|
|
50
50
|
|
51
51
|
```
|
52
52
|
|
53
|
-
前者は `Foo::k
|
53
|
+
前者は `Foo::kApple` で参照できますが、後者は`Bar::Type::kApple`と書かないといけません。
|
54
|
+
|
55
|
+
(前者はクラス内で定義されているので、長い名前を付ける必要がない)
|
54
56
|
|
55
57
|
|
56
58
|
|