```c++
const ReducedGroupId& reduced_group_id = memo.GetReduceGroupId(group_id).value();
```
华点在这一行,memo.GetReduceGroupId(group_id)是个临时的右值,你取完就悬垂了,所以这个这时候他的值是个 UB 。具体是什么全看编译器实现:
- Apple M2 aarch64+ clang16: 1, 1, 1
- Windows x86 + msvc14: 1, 1, 1
- Linux x86 + gcc14: 1, 4, 5
想要避免 UB ,多加一行把这个临时值存起来就好了
```c++
auto rgi = memo.GetReduceGroupId(group_id);
const ReducedGroupId& reduced_group_id = rgi.value();
```
这里 auto 类型可以是 std::optional<ReducedGroupId>也可以是它的右值引用 std::optional<ReducedGroupId> &&。 |