マクロは、C ++コンパイラに送信される前に、テキストソースコードにC ++プリプロセッサによって実装されます。「constexpr」は言語自体の一部であり、コンパイル時にコンパイラによって評価されます。

どちらもコンパイル時間定数を定義するために使用できますが、一般に「constexpr」を好む必要があります。これは、範囲内の他の変数と偶発的な名前が競合するなど、C ++プレプロセッサの問題に悩まされないためです。
Macros are implemented by the C++ preprocessor on the textual source code before it is submitted to the C++ compiler. `constexpr` are part of the language itself and are evaluated by the compiler at compile time.

Both can be used to define compile-time constants but in general `constexpr` should be preferred because it does not suffer from the problems of the C++ preprocessor such as accidental name conflicts with other variables in scope.