.. _stdlib_constant_expression: ============================================ 常量表达式检查器和替换 ============================================ .. include:: detail/constexpr.rst constant_expression 模块实现了 `constant expression` 函数参数检查以及参数替换。 所有函数和符号都在 “constexpr” 模块中,使用 require 来访问它。 :: require daslib/constant_expression ++++++++++++++++++++ Function annotations ++++++++++++++++++++ .. _handle-constant_expression-constexpr: .. das:attribute:: 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` .. _handle-constant_expression-constant_expression: .. das:attribute:: 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 +++++++++++++ 宏帮助程序 +++++++++++++ * :ref:`isConstantExpression (expr:smart_ptr\ const) : bool ` .. _function-_at_constant_expression_c__c_isConstantExpression_CY_ls_ExpressionPtr_gr_1_ls_H_ls_ast_c__c_Expression_gr__gr__qm_M: .. das:function:: isConstantExpression(expr: ExpressionPtr) isConstantExpression returns bool +--------+--------------------------------------------+ +argument+argument type + +========+============================================+ +expr + :ref:`ExpressionPtr ` + +--------+--------------------------------------------+ 如果表达式是常量表达式,则此宏函数返回 true