Chinaunix首页 | 论坛 | 博客
  • 博客访问: 916415
  • 博文数量: 299
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2493
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-21 10:07
个人简介

Linux后台服务器编程。

文章分类

全部博文(299)

文章存档

2015年(2)

2014年(297)

发布时间:2014-08-05 17:12:31

构造函数派生类的对象的数据结构是由基类中说明的数据成员和派生类中说明的数据成员共同构成。将派生类的对象中由基类中说明的数据成员和操作所构成的封装体称为基类子对象,它由基类中的构造函数进行初始化。 构造函数不能够被继承,因此,派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象。所以,在.........【阅读全文】

阅读(4129) | 评论(0) | 转发(0)

发布时间:2014-08-05 10:53:56

如今,但凡说精通网络的,第二个意思就是“精通TCP”,事实上,很多自称精通TCP的家伙们只是精通socket接口而已,对TCP行为精通的并不多,笔者也不算精通,但绝对是中等以上水平。如果你真的精通TCP行为,那么本文不读也罢,直接发邮件给我,我们切磋一下,如果只是了解socket接口,那么建议读本文,然后一定再看一下《TCP.........【阅读全文】

阅读(1089) | 评论(0) | 转发(0)

发布时间:2014-08-05 10:52:37

说明:1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义4).除了《TCP/IP详解》(.........【阅读全文】

阅读(1092) | 评论(0) | 转发(0)

发布时间:2014-08-04 12:05:27

queue和list的结构定义和操作都在'sys/queue.h'中完成, 主要定义了下面四种数据结构:单向列表(single-linked lists)单向尾队列(single-linked tail queue)列表(lists)尾队列(tail queues)尾队列图示 尾队列常用宏宏名称.........【阅读全文】

阅读(2497) | 评论(0) | 转发(0)

发布时间:2014-08-04 08:43:27

最近项目组中有个同事使用epoll+多线程实现了一个简单的服务器,但是经过压测后,发现如果使用边缘触发模式的话,就会出现丢包现象,水平触发设置等待时间确实解决了丢包问题,但却影响了服务器的性能。所以我就写了一个epoll+多进程的模型,代码如下:#include <sys/socket.h>  #include <sys/epoll.h>  .........【阅读全文】

阅读(1834) | 评论(0) | 转发(0)

发布时间:2014-08-03 21:34:44

Client:#include   <sys/stat.h>#include   <sys/types.h>#include   <sys/socket.h>#include   <stdio.h>#include   <stdlib.h>#include   <malloc.h>#include   <netdb.h>#include   <fcntl.h>#include   <unistd.h>#include   <netinet/in.h>#include &nb.........【阅读全文】

阅读(1354) | 评论(0) | 转发(0)

发布时间:2014-08-03 17:02:00

自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。  由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。  信号量和读.........【阅读全文】

阅读(2041) | 评论(0) | 转发(2)

发布时间:2014-08-03 11:41:35

va_start和va_end使用详解  本文主要介绍va_start和va_end的使用及原理。  在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。  介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我.........【阅读全文】

阅读(1243) | 评论(0) | 转发(0)

发布时间:2014-08-02 09:59:52

什么线程池,为什么要使用线程池?下面是一个比喻。阶段一、一个医院,每天面对成千上万的病人,处理方式是:来一个病人找来一个医生处理,处理完了医生也走了。当看病时间较短的时候,医生来去的时间,显得尤为费时了。阶段二、医院引进了线程池的概念。设置门诊,把医生全派出去坐诊,病人来看病先挂号排队,医.........【阅读全文】

阅读(1608) | 评论(0) | 转发(0)

发布时间:2014-08-02 09:00:07

我设计这个线程池的初衷是为了与socket对接的。线程池的实现千变万化,我得这个并不一定是最好的,但却是否和我心目中需求模型的。现把部分设计思路和代码贴出,以期抛砖引玉。个人比较喜欢搞开源,所以大家如果觉得有什么需要改善的地方,欢迎给予评论。思前想后,也没啥设计图能表达出设计思想,就把类图贴出来吧。.........【阅读全文】

阅读(1806) | 评论(1) | 转发(0)

发布时间:2014-08-01 21:14:09

对一个进程预定义了三个流,并且这三个流可以自动的被进程使用,它们是:标准输入、标准输出、和标准错误。标准I/O库提供缓冲的目的是尽可能减少使用read和write的次数。标准I/O库提供了三种类型的缓冲:1、全缓冲:在填满标准I/O缓冲区后进行实际I/O操作。对于驻留.........【阅读全文】

阅读(1373) | 评论(0) | 转发(0)

发布时间:2014-08-01 20:20:00

1、C标准库的I/O缓冲区 UNIX的传统是Everything is a file, 键盘、显示器、串口、磁盘等设备在/dev 目录下都有一个特殊的设备文件与之对应,这些设备文件也可以像普通文件(保存在磁盘上的文件)一样打开、读、写和关闭,使用的函数接口是相同的。 用户程序调用C标准I/O库函数读写普通文件或设备,而这.........【阅读全文】

阅读(1813) | 评论(0) | 转发(0)

发布时间:2014-08-01 15:34:43

mysql存储过程详解 1.      存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来.........【阅读全文】

阅读(1568) | 评论(0) | 转发(0)
给主人留下些什么吧!~~

tianyashuibin2014-12-08 11:22

Oscarzhao:c++11 中貌似可以

嗯,是的,在c++11中可以

下面是在gcc的编译结果:
test_struct.cc:8:11: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
   int a = 1;
           ^

回复  |  举报

Oscarzhao2014-11-26 20:12

tianyashuibin:除了静态数据成员外,数据成员不能在类体内显式的初始化

举个最简单例子
struct a

  int a=1;
  int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间

c++11 中貌似可以

回复  |  举报

tianyashuibin2014-10-23 21:57

除了静态数据成员外,数据成员不能在类体内显式的初始化

举个最简单例子
struct a

  int a=1;
  int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间

回复  |  举报

tianyashuibin2014-10-23 21:39

1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
  1.类里面的任何成员变量在定义时是不能初始化的。
  2.一般的数据成员可以在构造函数中初始化。
  3.const数据成员必须在构造函数的初始化列表中初始化。
  4.static要在类的定义外面初始化。   
  5.数组成员是不能在初始化列表里初始化的。
  6.不能给数组指定明显的初始化。  
这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。

回复  |  举报

tianyashuibin2014-10-23 21:32

记住静态成员这样初始化:
C/C++ code

class A
{
public:
   static const int a[3];
};
 
const int A::a[3] = {1,2,3};

回复  |  举报
留言热议
请登录后留言。

登录 注册