ev-mold-variant-reference-filter-003¶
| 字段 | 值 |
|---|---|
| 项目 | rui314/mold |
| 固定 commit | 27162691b71a |
| 路径 | src/cmdline.cc |
| 行段 | L1512-L1516 |
| 特性 | std::variant |
| 许可证 | MIT |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-10-25 |
| 测试代码 | 否 |
| 发现方式 | tree-sitter |
用法¶
持有 variant 的引用,并用 get_if 过滤出符号类型的元素
为什么典型¶
循环只需处理其中一个活动成员;get_if 不抛异常,非空结果直接解引用,空的数值地址成员被跳过。
摘录¶
for (i64 i = 0; i < ctx.arg.defsyms.size(); i++) {
std::variant<Symbol<E> *, u64> &val = ctx.arg.defsyms[i].second;
if (Symbol<E> **sym = std::get_if<Symbol<E> *>(&val))
ctx.arg.undefined.push_back(*sym);
}
备注¶
生产路径;get_if 对引用取地址,参数是 variant 指针而不是值。