08/08/02 17:06:39
>>244
いやいや、もちろんコンパイル時も使う。
定数のみを引数に取ったらコンパイル時に展開すればいい。
constexpr int pow(int x, unsigned int n) { return n > 0 ? x * pow(x, n - 1) : 1; }
...
char buffer[pow(2, 8)]; // 定数
unsigned int n; std::cin >> n; std::cout << pow(2, n); // 変数
constexprを取ったら、配列のサイズが定数式じゃないから通らない。
テンプレートでメタ関数として書くと、今度は変数が使えない。