C++
文章平均质量分 72
micx0124
hello world
展开
-
程序内存分布
在多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中。这个沙盘就是虚拟地址空间(virtual address space),在32位模式下它总是一个4GB的内存地址块。这些虚拟地址通过页表(page table)映射到物理内存,页表由操作系统维护并被处理器引用。每一个进程拥有一套属于它自己的页表,但是还有一个隐情。只要虚拟地址被使能,那么它就会作用于这台机器上运行的所有软件,转载 2013-11-05 12:16:52 · 519 阅读 · 0 评论 -
C++中protected的访问权限
转载,释然读C++ Primer 心中疑惑: http://www.cnblogs.com/harlentan/archive/2011/03/05/2006444.html关于C++中protected的访问权限的讨论已经是一个很陈旧的话题了,陈旧到大家都不愿意去讨论,觉得他见到到吃饭睡觉那么自然。我再次读《C++ Primer》的时候,其中关于protected 成员的描述是这样的:转载 2013-08-15 17:22:19 · 407 阅读 · 0 评论 -
如何让new 操作 不分配内存 只调用构造函数
问题:c++中的new操作符 通常完成两个工作 分配内存及调用相应的构造出世核函数。请问:1)如何让new操作符不分配内存,只调用构造函数?2) 这样的用法有什么用?解答:(要求new显式调用构造函数,但不分配内存。)题目要求不能生成内存 还要调用构造函数 说明这个类里面没有对内部操作 但可以对外部操作 比如static的数摘录:如果我是用new分配对象的,可以转载 2013-08-14 21:35:06 · 900 阅读 · 0 评论 -
虚函数和纯虚函数的区别
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次: class A{public: virtual void转载 2013-08-14 20:42:12 · 340 阅读 · 0 评论 -
strtok 函数解析 及缺陷
strtok:#include char *strtok(char *str, const char *delim);char *strtok_r(char *str, const char *delim, char **saveptr);功能:分解字符串为一组标记串。str为要分解的字符串,delim为分隔符字符串。说明:首次调用时,str必须指向要分解的字符串,随后调用要把原创 2013-08-14 14:10:38 · 872 阅读 · 0 评论 -
引用与指针的区别
在c++函数中,形式参数用 引用 和用指针都可以起到在被调用函数中改变调用函数的变量的作用。什么时候用引用作参数?什么时候用指针作参数呢 void function (int *ptr); void function(int &ref); 没有 特定的规定。。学的 久了,就 会习惯什么时候用指针什么时候用引用了!引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引转载 2013-08-14 13:33:39 · 352 阅读 · 0 评论 -
C++ 对象的内存布局(上)
http://blog.csdn.net/haoel/article/details/3081328/C++ 对象的内存布局(上) 陈皓http://blog.csdn.net/haoel 点击这里查看下篇>>>前言 07年12月,我写了一篇《C++虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我转载 2013-08-13 21:12:31 · 374 阅读 · 0 评论 -
c++中不能重载的运算符
算术运算符:+,-,*,/,%,++,--;位操作运算符:&,|,~,^(位异或),<<(左移),>>(右移)逻辑运算符:!,&&,||;比较运算符:<,>,>=,<=,==,!=;赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=;其他运算符:[],(),->,,(逗号运算符),new,delete,new[],delete[],->*。原创 2013-08-13 19:38:02 · 495 阅读 · 0 评论 -
类大小——sizeof 研究(虚继承)
class Top { protected: int x; public: Top(int n):x(n){cout<<"Top"<<endl;} virtual ~Top(){} }; class Left:virtual public Top { protected: int y;转载 2013-08-13 19:26:51 · 427 阅读 · 0 评论 -
拷贝构造函数
http://blog.csdn.net/lwbeyond/article/details/6202256转载 2013-08-13 21:01:55 · 374 阅读 · 0 评论 -
C++ 虚函数表解析
陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是转载 2013-05-08 20:09:43 · 312 阅读 · 0 评论 -
C++之RTTI
RTTI(Run-Time Type Identification 运行时类型识别)是面向对象程序设计中一种重要的技术。 和很多其他语言一样,C++是一种静态类型语言。其数据类型是在编译期就确定的,不能在运行时更改。然而由于面向对象程序设计中多态性的要求,C++中的指针或引用(Reference)本身的类型,可能与它实际代表(指向或引用)的类型并不一致(比如基类指针指向派生类对象转载 2013-08-13 15:46:49 · 449 阅读 · 0 评论 -
C++ STL map 总结
map是键-值对的集合。map类型通常可以理解为关联数组:可以使用键作为下标来获取一个值。使用map必须包含map头文件map m;创建一个名为m的空map对象,其键和值的类型分别为k 和 v1.类型约束在使用关联容器时,它的键不但有一个类型,而且还有一个相关的比较函数。默认情况下,标准库使用键类型的定义的 对于键类型,唯一的约束就是必须支持 #include #in原创 2013-04-24 19:47:29 · 621 阅读 · 0 评论 -
引用计数的原理和实例
引用计数是对共享的动态内存的一种管理方法,STL库的string就是用到了引用计数的方法。本文简单描述引用计数的原理,重点以一个实例来说明怎么在程序中实现引用计数。1. 概念引用计数用来记录当前有多少指针指向同一块动态分配的内存。当有指针指向这块内存时,计数器加1;当指向此内存的指针销毁时,计数器减1。当引用计数为0时,表示此块内存没有被任何指针指向,此块被共享的动态内存才能被释放。转载 2013-08-16 14:55:06 · 631 阅读 · 0 评论 -
boost 线程池
安装boost:http://www.boost.org/下载boost,我下下来是boost_1_51_0.boost库的大部分都可以直接引用头文件就行了,因为大多数都是头文件里模板加inline函数构成。但是也有些是需要安装成二进制lib的,比如thread.(详见文档:"Getting Started...")$ cd boost_1_51_0$ sudo ./bootstr原创 2013-08-29 21:12:10 · 830 阅读 · 0 评论 -
MYSQL数据库性能测试报告
测试环境: DELL 2.4G memory 512M RH9.0 MySql 3.23.54测试使用的是mysql缺省参数,用mysql提供的API用C编写测试程序测试程序共启动40个线程进行数据库操作,查找、插入、修改、删除各10个,每个线程独立与Sql Server连接。数据库结构,单表,表结构如下: toheader转载 2013-09-09 11:00:46 · 2281 阅读 · 0 评论 -
多进程服务器中,epoll的创建应该在创建子进程之后
看我的测试代码,似乎应该是在创建子进程之后创建epoll的fd,否则程序将会有问题,试将代码中两个CreateWorker函数的调用位置分别调用,一个在创建epoll fd之前,一个在之后,在调用在创建之前的代码会出问题,在我的机器上(linux内核2.6.26)表现的症状就是所有进程的epoll_wait函数返回0, 而客户端似乎被阻塞了:服务器端:#include #inclu转载 2013-09-29 14:06:10 · 420 阅读 · 0 评论 -
无符号数与有符号数比较
先出几个题目,再解释一下为什么答案是那样的。题目一:int a = -1;unsigned int b = 1;printf("%d", a > b);结果输出:1因为无符号数与有符号数比较时,要将有符号数转化为无符号数,再来比较。a转化为无符号数后就是0xFFFFFFFF,肯定大于b题目二:char a = -1;unsigned char b = 1;p转载 2013-09-29 00:08:57 · 466 阅读 · 0 评论 -
关于unsigned与signed的转换问题
1.无论int是unsigned还是signed,如果int转化为char,均截取最低8位作为char的值。2.例如(1)如果char为signedchar c;int i=193;c=i;printf("%d\n",c);//输出-63,因为-63为193的补过程:因为计算机存储的是数的补码所以:193的二进制为:1100,0001则pri转载 2013-09-28 23:46:10 · 3137 阅读 · 0 评论 -
非阻塞(nonblock)socket接口会否出现EINTR错误
对于socket接口(指connect/send/recv/accept..等等后面不重复,不包括不能设置非阻塞的如select),在阻塞模式下有可能因为发生信号,返回EINTR错误,由用户做重试或终止。 但是,在非阻塞模式下,是否出现这种错误呢? 对此,重温了系统调用、信号、socket相关知识,得出结论是:不会出现。 首先, 1.信号的处理是在用户态下进行的,也就是必须转载 2013-10-09 16:29:34 · 665 阅读 · 0 评论 -
c++中的explicit关键字及隐式类型转换
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class MyClass{public:MyClass( int num );}转载 2013-10-07 16:12:35 · 498 阅读 · 0 评论 -
C++隐式类型转换 operator T
对于operator关健字用于运算符重载这我们都知道,其实operator还有另外一种作用:强制类型转换。上一周为了对应项目中一个问题,同事帮助写了一个类,使用到了operator的强制类型转换作用,后来source review的时候几个leader也不明白其作用,问我是怎么回事,当时我也只是一知半解,无奈解析了半天更天也没有让leader明白,汗。。。后来让这们同事来解析才清楚。 下转载 2013-10-07 15:59:15 · 1337 阅读 · 0 评论 -
常量折叠 Constant folding
常量折叠:在编译时期用常量的具体取值代替所有用到常量的地方。例如const int a = 8;cout 经过编译器扫描后,变为:cout 常量一般分为两种:可以常量折叠的常量和不可以常量折叠的常量。下面具个不可以常量折叠的常量的例子:int test(){ return 8; }const int a = test();//常量a不可以常量折叠cout原创 2013-10-06 20:32:16 · 3060 阅读 · 0 评论 -
虚析构函数的一点理解
千万不要将析构函数和虚函数混淆起来。不管析构函数是不是虚函数,将析构函数设为虚函数是希望在通过基类指针删除派生类对象时调用派生类的析构函数。如果析构函数不是虚函数,派生类对象没有Vptr,编译器会调用基类的析构函数(在编译时就确定了)。 这样,用户在派生类析构函数中填写的代码就不会被调用,派生类成员对象的析构函数也不会被调用。不过,派生类对象空间还是会被正确释放的,堆管理程序知道原创 2013-10-05 11:00:42 · 386 阅读 · 0 评论 -
指针轻松破除访问属性
例1:#include using namespace std;class B{int x;int y;public: B():x(1),y(2){ }};int main(){ B b; int *p=reinterpret_cast(&b); cout<<*p<<" "<<*(p+1)<<endl;原创 2013-10-05 09:58:17 · 450 阅读 · 0 评论 -
c++有关编译期和运行期的访问
先要引用一一段,相信不少人看过:看这样一段代码。#include using namespace std; class A{ public: virtual void f(){cout<<"A"<<endl;} }; class B:public A { private: void f(){cout<<"B"<<endl;}转载 2013-10-05 12:00:51 · 786 阅读 · 0 评论 -
访问控制是在编译期间处理
该题写的是考查应聘者对于C++中的存取权限的理解,但经我稍微的分析,觉得不完全如是,现把它公开出来,希望各位能够畅所欲言,发表自己的看法有类A,它被定义在a.h中,A有private成员i,如下:class A {private:int i;// ...};A的实现在a.cpp中(具体细节略)。在另外一个main.cpp中,我们使用了A,当然,我们知道直接访问A::转载 2013-10-05 10:52:11 · 535 阅读 · 0 评论 -
STL容器中erase方法的不同陷阱
STL中的容器都有erase方法,容器的存储分为顺序存储(如vector)与链式存储(如list,map)。先以map为例:[cpp] view plaincopytypedef std::map TStrMap; typedef TStrMap::iterator TStrMapIter; TStrMap strmap;转载 2013-09-14 17:45:07 · 429 阅读 · 0 评论 -
static_cast、dynamic_cast reinterpret_cast和const_cast
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。stat转载 2013-08-09 17:15:29 · 596 阅读 · 0 评论 -
RTTI(运行时类型识别)和dynamic_cast
对于带虚函数的类,在运行时执行RTTI操作符,但对于其他类型,在编译时计算RTTI操作符。当具有基类的引用或指针,但需要执行不是基类组成部分的派生类操作的时候,需要动态的强制类型转换。在某些情况下,不可能使用虚函数,在这些情况下,RTTI提供了可选的机制。这种机制比使用虚函数更容易出错:程序员必须知道应该将对象强制转换为哪种类型,并且必须检查转换是否成功执行了。dynamic_cast操作转载 2013-08-09 19:08:38 · 859 阅读 · 0 评论 -
C++ 构造函数
1.类成员的显示初始化 对于没有定义构造函数并且其全体数据成员均为public的类,可以采用与初始化数组元素相同的方式初始化其成员struct Data{ int ival; char *ptr;};Data val1={0,0};Data val2={1024,"hello ..."}; pair的数据成员为public,但是如下代码无法编译?原创 2013-05-05 20:45:51 · 357 阅读 · 0 评论 -
c++类的实例化,有没有new的区别
A a; //等同于 A a = A();A * a = new a(); 以上两种方式皆可实现类的实例化,有new的区别在于:1.前者在堆栈中分配内存,后者为动态内存分配,在一般应用中是没有什么区别的,但动态内存分配会使对象的可控性增强。2.不加new在堆栈中分配内存3.大程序用new,小程序直接申请4.只是把对象分配在堆栈内存中5.new必须delete删转载 2013-05-04 19:16:09 · 689 阅读 · 0 评论 -
C++ 操作符重载
1.不能重载的操作符 ::.*.?:原创 2013-05-04 14:55:05 · 365 阅读 · 0 评论 -
深入C++的new
“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:class A{转载 2013-05-04 20:14:17 · 505 阅读 · 0 评论 -
C++中struct和class的区别
一、 C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。 struct能包含成员函数吗? 能! struct能继承吗? 能!! struct能实现多态吗? 能!!! 最本质的一个区别就是默认的访问控制,体现在两个方面: 1)默认转载 2013-05-04 15:35:30 · 433 阅读 · 0 评论 -
函数指针
函数指针的声明方法为:函数类型 (标志符指针变量名) (形参列表);注1:“函数类型”说明函数的返回类型,“(标志符指针变量名 )”中的括号不能省,若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:int func(int x); /* 声明一个函数 */int (*f) (int x); /* 声明一原创 2013-05-04 15:42:32 · 344 阅读 · 0 评论 -
C++ const
原文地址:http://blog.csdn.net/Eric_Jo/article/details/4138548C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。 Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、转载 2013-05-02 15:20:07 · 399 阅读 · 0 评论 -
C++ 类
1.类的三大特性:封装、继承、多态2.类背后蕴涵的基本思想:数据抽象和封装 数据抽象: 数据抽象是一种依赖于接口和实现分离的编程(设计)技术。类使用者只需关系类提供了哪些接口,而不必关心该类是如何实现的。 封装:封装是将底层次的元素组合起来形成新的、高层次实体的计算。函数是封装的一种形式。类是一个封装的实体。private 封装了类型的实现细节。3.具体原创 2013-04-28 16:39:31 · 1153 阅读 · 0 评论 -
C\C++
1.定义MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types).This keyword returns a value of type size_t.其返回值类原创 2013-05-02 10:45:36 · 332 阅读 · 0 评论 -
C++ I/O
1.标准IO类C++标准IO类型在三个独立的头文件中定义:iosstream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,sstream定义的类型则用于读写存储在内存中的string对象。库自动定义了一些标准对象: (1) cout:ostream类的一个对象,可以将数据显示在标准输出设备上。 (2) cerr:os原创 2013-05-02 09:30:45 · 441 阅读 · 0 评论