d不应为@信任推导域和中

原文
应编译,但未编译:

struct MyType
{ private @system int* _content;
  // 设计为_content永不局部数据
  @trusted pure this(return ref int i){_content = new int(i);}
  // 注意,未标记为`中域`,应返回`非域`指针
  @trusted pure scope content(){return _content;}
}

@safe void main()
{ int* outer;
  if(true)
  { int inner;
    // 故意按域推导.
    auto myVar = MyType(inner);
    // 应允许
    outer = myVar.content;
  }
}

参考
错误是,myVar域变量赋值给更长生命期outer了.
这是正确的错误信息.outer的寿命比inner的区间长,所以置outerinner是错误的.
如果需要编译,请从main()中删除@safe.
推导域是D的一个特性.根据是否标记域指针函数@safe,来检查域指针.是按设计工作的.

posted @   zjh6  阅读(9)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示