回答編集履歴

1

追記

2018/05/17 13:39

投稿

asm
asm

スコア15147

test CHANGED
@@ -1 +1,39 @@
1
1
  C++でコンパイル時に定数として決まるのならば`constexpr`をオススメします。
2
+
3
+
4
+
5
+ ---
6
+
7
+
8
+
9
+ `#define` は単なる文字列置換マクロです。
10
+
11
+ C言語の場合、`const修飾された変数`は**定数式ではない**という制約があったため
12
+
13
+ - 配列の要素数を指定する際に使えない
14
+
15
+ - const変数の初期化式に使えない
16
+
17
+ などの制約がありました。
18
+
19
+
20
+
21
+ このため、C言語との互換が必要ならば`#define`を使う必要がありました。
22
+
23
+
24
+
25
+ `const` は定数として扱える変数です。
26
+
27
+ C++では配列の要素数の指定などにも使えるようになりました。
28
+
29
+ コンパイル時に定数となるもの、実行時に定数として取得するものがあります。
30
+
31
+ そのため変数と同様に、メモリアクセスが発生しえます。
32
+
33
+
34
+
35
+ `constexpr`はコンパイル時に決定される定数です。
36
+
37
+ コンパイル時に値が分かっているので、機械語に埋め込まれる事を期待できたはずです。
38
+
39
+ さらにconstexpr関数を用いる事でC言語の関数マクロの大半を投げ捨てる事が可能になります。