跳转至

ev-mold-init-statement-optional-003

字段 值
项目 rui314/mold
固定 commit 27162691b71a
路径 src/input-files.cc
行段 L43-L52
特性 if 与 switch 的初始化语句
许可证 MIT
代码来源 项目源码
级别 manual
审核 zyuhao7 @ 2026-10-26
测试代码 否
发现方式 manual

用法

在 if 条件中声明 optional 结果,把声明与判空合并到同一条语句

为什么典型

解复用结果只在成功时使用;初始化变量随 if 结束销毁,不会把 optional 泄漏到后续控制流。

摘录

template <typename E>
std::string_view demangle(const Symbol<E> &sym) {
  if (is_rust_symbol(sym)) {
    if (std::optional<std::string_view> s = demangle_rust(sym.name()))
      return *s;
  } else {
    if (std::optional<std::string_view> s = demangle_cpp(sym.name()))
      return *s;
  }
  return sym.name();

备注

生产链接器代码;Rust 与 C++ 两条解复用路径都使用同一写法。

查看固定 commit 源码 · 返回证据索引