回答編集履歴
2
ビットフラグについて追記
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
> (2) デメリットはC言語で利用できないという一点でしょうか?
|
9
9
|
|
10
|
-
少々コードが長くなることがあります。
|
10
|
+
●少々コードが長くなることがあります。
|
11
11
|
```cpp
|
12
12
|
|
13
13
|
class Foo {
|
@@ -27,6 +27,21 @@
|
|
27
27
|
前者は `Foo::kApple` で参照できますが、後者は`Bar::Type::kApple`と書かないといけません。
|
28
28
|
(前者はクラス内で定義されているので、長い名前を付ける必要がない)
|
29
29
|
|
30
|
+
●enum classでは簡単に整数演算ができないので、ビットフラグを表現するのは現実的ではありません。
|
31
|
+
|
32
|
+
```cpp
|
33
|
+
|
34
|
+
enum class FooFlags {
|
35
|
+
kFlag1 = 1 << 0,
|
36
|
+
kFlag2 = 1 << 1,
|
37
|
+
kFlag3 = 1 << 2,
|
38
|
+
};
|
39
|
+
|
40
|
+
FooFlags flags = ...;
|
41
|
+
if (flags & FooFLags::kFlag2) { // できない
|
42
|
+
```
|
43
|
+
|
44
|
+
|
30
45
|
> (3) enum classを使うことでenumより速度が落ちるなどあるのでしょうか? (プリプロセッサーが捌く範囲で関係ないでしょうか?)
|
31
46
|
|
32
47
|
ありません。
|
1
文言
answer
CHANGED
@@ -12,19 +12,20 @@
|
|
12
12
|
|
13
13
|
class Foo {
|
14
14
|
enum Type {
|
15
|
-
|
15
|
+
kApple,
|
16
|
-
|
16
|
+
kOrange
|
17
17
|
};
|
18
18
|
}
|
19
19
|
|
20
20
|
class Bar {
|
21
21
|
enum class Type {
|
22
|
-
|
22
|
+
kApple,
|
23
|
-
|
23
|
+
kOrange,
|
24
24
|
};
|
25
25
|
};
|
26
26
|
```
|
27
|
-
前者は `Foo::
|
27
|
+
前者は `Foo::kApple` で参照できますが、後者は`Bar::Type::kApple`と書かないといけません。
|
28
|
+
(前者はクラス内で定義されているので、長い名前を付ける必要がない)
|
28
29
|
|
29
30
|
> (3) enum classを使うことでenumより速度が落ちるなどあるのでしょうか? (プリプロセッサーが捌く範囲で関係ないでしょうか?)
|
30
31
|
|