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

Linux后台服务器编程。

文章分类

全部博文(299)

文章存档

2015年(2)

2014年(297)

发布时间:2014-09-09 22:50:56

问题C语言以及C++语言中的const究竟表示什么?其具体的实现机制又是如何实现的呢? 本文将对这两个问题进行一些分析,简单解释const的含义以及实现机制。问题分析简单的说const在C语言中表示只读的变量,而在C++语言中表示常量。关于const在C与C++语言中的使用以及更多的区别,以后有时间另开一.........【阅读全文】

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

发布时间:2014-09-09 16:56:21

操作系统: Redhat Linux AS5 32bit服务器内存: 4G服务器类型: I32最近写搜索引擎, 因为创建索引需要大量的内存, 所以对Linux下的大内存申请进行了一些测试. 希望对大家有所帮助.(1)char * p = (char *)malloc( 2G字节 );=>申请失败.(2)char * p = (char *)malloc( 1.9G字节 );=>申请成功(3)连续的申请10个300M.........【阅读全文】

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

发布时间:2014-08-27 16:36:56

在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即<类名>::<静态成员名>。.........【阅读全文】

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

发布时间:2014-08-22 21:22:58

总结一:先看一个空的类占多少空间? [cpp] view plaincopyclass Base  {  public:      Base();      ~Base();  .........【阅读全文】

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

发布时间:2014-08-10 15:57:37

 什么是类型安全?类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制;有的时候也用“类型安全”形容某个程序,判别的标准在于该程序是否隐含类型错误。类型安全的编程语言与类型.........【阅读全文】

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

发布时间:2014-08-07 17:38:53

   volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP.........【阅读全文】

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

发布时间:2014-08-06 17:09:45

C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。面向过程的static静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下://Example.........【阅读全文】

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

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

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

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

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

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

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

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

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

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

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

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

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

发布时间:2014-07-30 21:44:42

变量定义与声明的区别我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:     变量的声明有两种情况:     (1) 一种是需要建立存储空间的(定义、.........【阅读全文】

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

发布时间:2014-07-30 21:40:42

在写 头文件的时间 经常会有一些 class QFile 等这类 看似 是声明的东西..例如下面#ifndef WINDOW_H#define WINDOW_HQT_BEGIN_NAMESPACEclass QTcpServer;class QTcpSocket;class QProgressBar;class QLabel;class QDialogButtonBox;class QFile;QT_END_NAMESPACE//code endclass QAction;class Q.........【阅读全文】

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

发布时间:2014-07-30 00:02:14

......【阅读全文】

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

发布时间:2014-07-29 21:08:25

初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们一些基本的语法法则,但不会告诉我们为什么这么做?今天和大家谈的一点感悟就是我在学习编程过程中的一点经.........【阅读全文】

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

发布时间:2014-07-29 17:58:07

前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI.........【阅读全文】

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

发布时间:2014-07-29 16:48:37

在C++中,不能声明虚构造函数,但可以声明虚析构函数。多态性是指不同的对象对同一消息有不同的行为特性。虚函数作为运行时多态性的基础,主要是针对对象的,而构造函数是在对象产生之前运行的,因此虚构造函数是没有意义的。      析构函数的功能是在该类对象消亡之前进行一些必要的清理.........【阅读全文】

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

发布时间:2014-07-29 16:04:55

浅拷贝就比如像引用类型,而深拷贝就比如值类型。  浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。举个例子,一个人一开始叫张三,后来改名叫李四了,可是还是同一个人,不管是张三缺胳膊少腿还是李四缺胳膊少腿,都是这个人倒霉.........【阅读全文】

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

发布时间:2014-07-29 15:43:39

1. 公有继承当类的继承方式为公有继承时,基类的公有和保护成员的访问属性在派生类中保持不变,而基类的私有成员不可访问。即基类的公有成员和保护成员被继承到派生类中仍作为派生类的公有和保护成员,派生类的其他成员可以直接访问它们;其他外部使用者只能通过派生类的对象访问继承来的公有成员;而无.........【阅读全文】

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

发布时间:2014-07-28 16:46:35

  /0是C++中字符串的结尾标志,存储在字符串的结尾,它虽然不计入串长,但要占一个字节的内存空间。在百度百科中查看/0词条,会有这样一句话:c/c++中规定字符串的结尾标志为'/0'。有人可能认为,在C语言里(C++会不同),'/0'并不是字符型,而是int型。在这里,我们姑且和百度词条作者保持一致,认为/0与'/0'是.........【阅读全文】

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

发布时间:2014-07-28 16:42:06

之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可.........【阅读全文】

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

发布时间:2014-07-28 09:45:15

标准模板库就是类与函数模板的大集合。STL共有6种组件:容器,容器适配器,迭代器,算法,函数对象和函数适配器。1、容器:容器是用来存储和组织其他对象的对象。STL容器类的模板在标准头文件中定义。主要如下所示①序列容器基本的序列容器是上面图中的前三类:关于三者的优缺点主要是:.........【阅读全文】

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

发布时间:2014-07-27 21:15:33

STL的容器可以分为以下几个大类: 一:序列容器, 有vector, list, deque, string.二 : 关联容器,     有set, multiset, map, mulmap, hash_set, hash_map, hash_multiset, hash_multimap三: 其他的杂项: stack, queue, valarray, bitset STL各个容器的实现: .........【阅读全文】

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

发布时间:2014-07-27 21:11:24

  map映照容器的元素数据是一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系。        map映照容器的数据结构是采用红黑树来实现的,插入键值的元素不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来。   .........【阅读全文】

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

发布时间:2014-07-27 21:10:35

#include <iostream>#include <list>#include <numeric>#include <algorithm>using namespace std;//创建一个list容器的实例LISTINTtypedef list<int> LISTINT;//创建一个list容器的实例LISTCHARtypedef list<char> LISTCHAR;void main(void){    //------------------------.........【阅读全文】

阅读(968) | 评论(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};

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

登录 注册