回答編集履歴

2

ビットフラグについて追記

2021/07/13 10:06

投稿

int32_t
int32_t

スコア21695

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

文言

2021/07/13 10:06

投稿

int32_t
int32_t

スコア21695

test CHANGED
@@ -26,9 +26,9 @@
26
26
 
27
27
  enum Type {
28
28
 
29
- kType1,
29
+ kApple,
30
30
 
31
- kType2
31
+ kOrange
32
32
 
33
33
  };
34
34
 
@@ -40,9 +40,9 @@
40
40
 
41
41
  enum class Type {
42
42
 
43
- kType1,
43
+ kApple,
44
44
 
45
- kType2,
45
+ kOrange,
46
46
 
47
47
  };
48
48
 
@@ -50,7 +50,9 @@
50
50
 
51
51
  ```
52
52
 
53
- 前者は `Foo::kType1` で参照できますが、後者は`Bar::Type::kType1`と書かないといけません。
53
+ 前者は `Foo::kApple` で参照できますが、後者は`Bar::Type::kApple`と書かないといけません。
54
+
55
+ (前者はクラス内で定義されているので、長い名前を付ける必要がない)
54
56
 
55
57
 
56
58