为什么类不需要在使用之后定义的函数的前向声明?

时间:2019-03-30 11:29:20

标签: c++

Prog1:

class A{
public:
    void test_a(){
        b();//No need for forward declaration
    }
    void b(){
     //Do something
    }
}

Prog2:

void a();//forward declaration, else failure
int main(){
   a();
   return 0;
}

void a(){
//Do something
}

我们可以看到,没有前向声明,第二个程序将失败。

为什么第一个不失败?

1 个答案:

答案 0 :(得分:0)

由于成员函数name lookup的规则不同:

(重点是我的)

  

对于在成员函数体内使用的名称,成员函数的默认参数,成员函数的异常说明,默认成员初始化器, a contract condition of a member function (since C++20)或嵌套的类定义(包括基名称)从中派生嵌套类的对象),搜索的范围与类定义相同,只是考虑了类的整个范围,而不仅仅是声明之前使用该名称的部分

然后,无需从另一个函数中调用成员函数的前向声明。