目前,我正在学习使用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或开始接受,它将起作用。但是,如果我放弃Tcp_server类封装,则编译器将抱怨“未声明handle_accept”。我只是想知道编译器是否自动转发声明在同一类中定义的所有函数。谁能解释为什么?
类定义中定义的函数的语义与仅在类定义中声明然后在类定义之后立即定义的语义完全相同。唯一的区别是此类成员函数是隐式声明为内联的,而函数定义是非内联的或显式内联的。也就是说,从编译器的角度来看,在考虑函数定义之前先声明函数并定义类。
在类定义之后定义函数的原因很简单:如果不这样做,则类将是不完整的,并且成员查找将失败,这显然是成员函数定义所不希望的。副作用是,功能很容易相互引用。由于在类定义中定义成员函数主要是为了方便起见,因此要求为以后使用的成员函数声明也有些不便。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句