我的问题是:编译器在什么阶段执行名称lookup
。我认为它可能是在执行语义分析时,但我只是想确定,因为当我在搜索编译器分析时,他们没有在任何这个阶段(词法,语法,语义)中提及名称查找。
答案 0 :(得分:2)
这是一般的语义分析,但在C ++中,阶段都是交织在一起的,所以如果有人说出别的话,这是可以理解的。
答案 1 :(得分:2)
在C ++中,名称查找通常需要作为语法分析(解析)的一部分来完成,就像名称是类型名称或模板名称一样,会影响语法。如果事物可以独立于类型名称或模板名称进行解析,则名称查找可能会延迟到稍后,但这通常是实现细节。
答案 2 :(得分:0)
在C / C ++中,有时你无法确定句法元素的语义,而不知道它的类型(类型,变量等)。大多数C ++编译器使用生成的语法(yacc,bison)来构建语法树,因此名称查找必须在此之后。
考虑以下事项:
A * B;
这可以是A *类型的变量B的声明,也可以是声明在其上的参数A和B的运算符*。