叮当 API 中的奇怪代码

Strange code in clang API

本文关键字:代码 API 叮当      更新时间:2023-10-16

>我阅读了源代码clang API,并看到了这段代码

00127   Optional<T> getAs() const {
00128     if (!T::isKind(*this))
00129       return None;
00130     T t;
00131     ProgramPoint& PP = t;
00132     PP = *this;
00133     return t;
00134   }

第 130-133 行的代码是什么?为什么?http://clang.llvm.org/doxygen/ProgramPoint_8h_source.html#l00127

> 130:创建返回值,默认初始化。

131:创建对返回值的引用。

132:使用 ProgramPoint 的赋值运算符分配给引用。乍一看没有找到,所以它可能使用的是编译器生成的赋值运算符。

133:归还

创建引用的目的可以是以下一项或多项:

  • 检查 T 是否是 ProgramPoint 的子类
  • 在第 132 行中强制使用 ProgramPoint 赋值运算符(而不是子类 T)