0

我的问题是:编译器在哪个阶段执行 name lookup。我认为它可能是在执行语义分析时,但我只是想确保,因为当我搜索编译器分析时,他们没有在任何阶段(词汇、语法、语义)中提到名称查找。

4

3 回答 3

2

一般是语义分析,但在C++中,各个阶段都是交织在一起的,所以如果有人说别的,这也是可以理解的。

于 2012-08-11T02:24:38.470 回答
2

在 C++ 中,名称查找通常需要作为语法分析(解析)的一部分进行,当名称是类型名称或模板名称时,这会影响语法。如果事情可以独立于类型名或模板名进行解析,名称查找可能会推迟到以后,但这通常是一个实现细节。

于 2012-08-11T02:26:42.860 回答
0

在 C/C++ 中,有时您无法确定句法元素的语义,而不知道它的种类(类型、变量等)。大多数 C++ 编译器使用生成的语法(yacc、bison)来构建语法树,因此名称查找必须在此之后。

考虑以下:

A * B;

这要么是 A * 类型的变量 B 的声明,要么是在参数 A 和 B 上调用运算符 * 的语句。

于 2012-08-11T02:55:44.220 回答