C++编程-socket编程中为何要使用循环来调用阻塞式recv
你是否奇怪阻塞式接收recv这样的函数为什么要用一个for循环才能收全所有的内容?至少其中一种可能性是因为UNIX的信号处理机制。 在我的编程理念中,UNIX下的信号是一个徒增麻烦的东西,这也许是非控制台的Windows程序中没有信号的原因。 试想,如果你写了一个程序,无论是一个7*24的,还是一次性运行的,你通常期望它做完一段完整的工作后才被停下来,而不是在接收到一个也许你并不想要的信号直接就退出来。除非你在写一个初级的试验用的小程序,比如在写一个没有办法优雅关闭的死循环,不打算在正式的生产系统上使用,不需要
C++编程--多态的意义:流程的反转控制
我们在很多C++书籍中都会看到关于多态的例子,一般是写两个简单的类:class A{virtual int M1(){...};};class B:public class A{virtual init M1(){};};然后给出一个使用方法:B *b=new B;A *a=b;a->M1();此时执行B::M1();这个例子对于解释C++的多态语法是足够了,然而它没有揭示出我们为什么要用多态:既然我们能直接创建B,为什么我们不直接使用B.M1()呢?如果这样,多态与继承还有什么区别呢?有些书上会给稍微好一点的例子,再给一个函数:void test(A &a){a.M1();}然后给出一个使用方法:B *b=new B;test(*b); 这已经部分触