gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:18:45 26 4
gpt4 key购买 nike

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

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 或 start accept,它可以工作。但是,如果我放弃 Tcp_server 类封装,编译器会提示“未声明handle_accept”。我只是想知道编译器是否会自动转发声明同一类中定义的所有函数。谁能解释为什么?

最佳答案

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

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

关于c++ - 在同一个类中定义的这两个函数如何在没有前向声明的情况下相互调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27796804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com