我通过c ++接口使用z3。 z3 :: expr可以是基本变量/常量(c.real_const,c.real_val)或表达式。我经常遇到因使用z3 :: expr而导致的错误。 可以通过以下代码描述该问题:
z3::context c;
z3::expr exp(c);
for(...){
exp=...;
}
cout<<exp;
如果根本没有执行循环,我将收到错误。我知道原因是exp没有分配。如何检查是否分配了z3 :: expr变量?
答案 0 :(得分:1)
expr
类派生自ast
,它有一个可用于此目的的bool()运算符。这意味着我们可以简单地写
if (exp)
cout << exp;
(内部表达式和AST只是指针,只要指针非零,它们就应该有效,所以bool()运算符只检查非零指针:return m_ast != 0;
)。