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
}
我们可以看到,没有前向声明,第二个程序将失败。
为什么第一个不失败?
答案 0 :(得分:0)
由于成员函数name lookup的规则不同:
(重点是我的)
对于在成员函数体内使用的名称,成员函数的默认参数,成员函数的异常说明,默认成员初始化器
, a contract condition of a member function (since C++20)
或嵌套的类定义(包括基名称)从中派生嵌套类的对象),搜索的范围与类定义相同,只是考虑了类的整个范围,而不仅仅是声明之前使用该名称的部分
然后,无需从另一个函数中调用成员函数的前向声明。