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++ 两条解复用路径都使用同一写法。