如果我写
enum chars = digits ~ uppercase;
字符串会在编译时连接吗?我假设它会的。如果我用字符串文字或 CTFE 函数替换它,我无法测量任何显着的性能差异(即使调用它一亿次)。如果我用 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;
}