在同一类中定义的这两个函数如何在没有前向声明的情况下相互调用

How do these two functions defined in the same class manage to call each other without forward declaration?

本文关键字:声明 调用 情况下 一类 定义 两个 函数      更新时间:2023-10-16

目前我正在学习使用boost/asio编码。许多代码示例都利用async_accept和绑定的组合。在服务器代码中,我遇到了这样的事情:

class Tcp_server
{
public:
    Tcp_server()
    {
    }
    void start_accept(int a)
    {
        if(a>0)
        {
            cout<<a<<endl;
            handle_accept(a-1);
        }
    }
    void handle_accept(int a)
    {
        if(a>0)
        {
            cout<<a<<endl;
            start_accept(a-1);
        }
    }
};

如果我创建Tcp_server实例并调用handle_accept或开始接受,它可以工作。但是如果我放弃Tcp_server类封装,编译器会抱怨"handle_accept没有声明"。我只是想知道编译器是否自动转发声明同一类中定义的所有函数。谁能解释为什么?

类定义中定义的函数具有完全相同的语义,就好像它们仅在类定义中声明,然后在类定义之后立即定义一样。唯一的区别是,此类成员函数是内联隐式声明的,而函数定义不是内联的,而是显式内联的。也就是说,从编译器的角度来看,在考虑函数定义之前声明函数并定义类。

在类定义之后定义函数的原因很简单:如果不这样做,类将不完整,成员查找将失败,这对于成员函数定义显然是不可取的。作为副作用,函数可以很容易地相互引用。由于在类定义中定义成员函数主要是为了方便起见,因此要求声明稍后使用的成员函数也会有些不方便。