私が書くなら
enum chars = digits ~ uppercase;
文字列はコンパイル時に連結されますか? そうなると思います。これを文字列リテラルまたは CTFE 関数に置き換えた場合、大きなパフォーマンスの違いを測定することはできません (1 億回呼び出しても)。enum を const に置き換えると違いがあります。このように書くのは効率が悪いと言われました。便利だなと思いましたし、非効率さはわかりません。(ところで、この行は再帰的に呼び出される関数にあります)。
完全なコード (基数が異なる数値システムに変換)
import std.string;
string toBase(long n, int b)
in {
assert(2 <= b && b <= 35);
} body {
static string sign;
if (n < 0) {
n *= -1;
sign = "-";
}
enum chars = digits ~ uppercase;
size_t r = cast(size_t)(n % b);
if (n == r) {
return sign ~ chars[r];
}
return toBase((n - r) / b, b) ~ chars[r];
}
編集:コメントに応じて更新されたコード、質問には関係ありません
string toBase(long n, int b)
in {
assert(2 <= b && b <= 35);
} body {
enum chars = digits ~ uppercase;
long r = n % b;
char c = chars[cast(size_t) abs(r)];
if (n == r) {
return (n < 0 ? "-" : "") ~ c;
}
return toBase((n - r) / b, b) ~ c;
}