d拒绝@信任问题
void foo() @trusted
{
static struct T
{
Exception ex;
ubyte[] buf;
}
scope buffer = new ubyte[100];
T t;
t.ex = new Exception("hello");
t.buf = buffer;
throw t.ex;//不能抛t,
//但这是`@trusted`,`异常`不打算为`域`.
}
//因为,有`@trusted`,应该工作.
//在`@safe`中,因为由于`t.buf = buffer;`,推导`t`为域.所以`抛`会失败.
void main() @safe
{
foo();
}
//用-dip1000编译
但,返回值可以是无域
的,因此添加以下访问器
可以工作:
static struct T
{
Exception ex;
ubyte[] buf;
Exception getEx() { return ex; }
//好了,现在不局限`域`了.
}
...
throw t.getEx;
但仍觉得拒绝@trusted
代码是错误.
实际上,你可以@安全
:
void foo() @safe
{
...其余与最上面相同,略...
auto helloEx = new Exception("hello");
t.ex = helloEx;//
//最上面是直接t.ex = new Exception("hello");
t.buf = buffer;
throw helloEx;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现