Compilation 在运行时(非编译时)计算的纯D函数
我很好奇:如果有一个纯D函数,它可以在编译时计算 如果我不想在编译时计算一个纯函数,而是想在运行时计算它,该怎么办 例如:Compilation 在运行时(非编译时)计算的纯D函数,compilation,runtime,d,pure-function,Compilation,Runtime,D,Pure Function,我很好奇:如果有一个纯D函数,它可以在编译时计算 如果我不想在编译时计算一个纯函数,而是想在运行时计算它,该怎么办 例如: static int result = f(); f是一个纯函数,我希望它在运行时进行计算。仅供参考,并非所有纯函数都可以在编译时进行计算,纯函数并不要求在编译时运行。事实上,他们之间几乎没有什么关系 尝试对任何函数进行编译时函数求值,但仅当必须进行时。这是由上下文决定的-答案必须在编译时存在吗?以下情况也是如此: 枚举值 静态初始化器 静态if条件 静态foreach
static int result = f();
f
是一个纯函数,我希望它在运行时进行计算。仅供参考,并非所有纯函数都可以在编译时进行计算,纯函数并不要求在编译时运行。事实上,他们之间几乎没有什么关系
尝试对任何函数进行编译时函数求值,但仅当必须进行时。这是由上下文决定的-答案必须在编译时存在吗?以下情况也是如此:
- 枚举值
- 静态初始化器
- 静态if条件
- 静态foreach参数
- 模板参数
static int result = f();
上面是一个静态初始值设定项,因此是CTFE
这不再是静态初始值设定项,因此不再是CTFE。为了防止它被调用两次,您可以使用一个特殊的值(表示它还没有运行)或一个单独的bool标志对它进行常规的
if
检查
如果在模块范围内,请使用构造函数:
static int result;
static this() { result = f(); }
仅供参考,并非所有纯函数都可以在编译时计算,纯函数并不要求编译时运行。事实上,他们之间几乎没有什么关系 尝试对任何函数进行编译时函数求值,但仅当必须进行时。这是由上下文决定的-答案必须在编译时存在吗?以下情况也是如此:
- 枚举值
- 静态初始化器
- 静态if条件
- 静态foreach参数
- 模板参数
static int result = f();
上面是一个静态初始值设定项,因此是CTFE
这不再是静态初始值设定项,因此不再是CTFE。为了防止它被调用两次,您可以使用一个特殊的值(表示它还没有运行)或一个单独的bool标志对它进行常规的
if
检查
如果在模块范围内,请使用构造函数:
static int result;
static this() { result = f(); }