d易混淆域推断
ag0aep6g:
下面正常编译,
int* f()(int* p)
{
static int g;
g = 0;
return new int;
}
int* g() @safe
{
int x;
return f(&x);
}
而下面非,但应该.
int* f()(int* p)
{
static int g;
g = 0;
auto p2 = p; /* 唯一区别 */
return new int;
}
int* g() @safe
{
int x;
return f(&x); /*调用`test.f!().f`,赋值`x`局部变量的引用至`p`非域参数*/
}
W.B.:
为此,要分析数据流,但大大增加实现复杂性和编译时间,未实现,非错,标记为增强.
Paul Backus:
可显式用scope
声明,来绕过它.
int* f()(int* p)
{
static int g;
g = 0;
scope p2 = p; /* 唯一区别*/
return new int;
}
int* g() @safe
{
int x;
return f(&x); /* ok */
}
Dennis:
困惑.示例不含单个分支或循环
.应可以不创建控制流图
就推断域吧?应该是个循环.
Paul Backus:
当前,为推断p
的域,只需检查p
每个用法是否符合域.
为使示例工作,要递归地检查可能分配给p
的每次变量使用(如p2
),及*可能*
赋值给的变量,直到找不到要检查的新变量.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现