44. 常量表达式检查器和替换
constant_expression 模块实现了 constant expression 函数参数检查以及参数替换。
所有函数和符号都在 “constexpr” 模块中,使用 require 来访问它。
require daslib/constant_expression
44.1. Function annotations
- constexpr
此宏实现 constexpr 函数参数检查器。给定要验证的参数列表,对于传递非常量表达式的每个参数,它都会失败。例如:
[constexpr (a)]
def foo ( t:string; a : int )
print("{t} = {a}\n")
var BOO = 13
[export]
def main
foo("blah", 1)
foo("ouch", BOO) // 调整误差: `a is not a constexpr, BOO`
- constant_expression
此函数注释为给定参数实现常量表达式折叠。 在注释中指定 argument 并将其作为 contstant 表达式传递时,将生成函数的自定义版本,并将参数替换为常量值。 这允许对所述参数使用 static_if 表达式以及其他优化。 例如:
[constant_expression(constString)]
def take_const_arg(constString:string)
print("constant string is = {constString}\n") // note - constString here is not an argument
44.2. 宏帮助程序
- isConstantExpression(expr: ExpressionPtr)
isConstantExpression returns bool
argument |
argument type |
---|---|
expr |
|
如果表达式是常量表达式,则此宏函数返回 true