gpt4 book ai didi

d - 编译时评估

转载 作者:行者123 更新时间:2023-12-04 00:57:16 24 4
gpt4 key购买 nike

如果我写

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;
}

最佳答案

enum像这样的实例总是在编译时评估(并在编译时无法评估时抛出编译错误)

所以连接在编译时完成,不可变版本存储在代码中并在运行时引用

关于d - 编译时评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6562860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com