c++
xiangjie256
这个作者很懒,什么都没留下…
展开
-
c++版eclipse相关设置
自动提示:打开终端:输入:$ gcc- v得到类似的:gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) 很容易就看到你当前使用的版本了。启动Eclipse.进入:Windows-->Preferences-->C/C++找到Environment。增加两个变量:CPLUS_INCLUDE_PATH: /usr/include/c...原创 2011-03-03 21:06:15 · 123 阅读 · 0 评论 -
libxml2读写
[code="c++"]#include#includevoid writeXML(char* fileName){ xmlDocPtr doc; xmlNodePtr rootNode; xmlNodePtr basicNode; xmlNodePtr nodeContents; xmlNodePtr ...原创 2011-08-03 20:29:05 · 130 阅读 · 0 评论 -
回 调
话不多说,上代码[code="c++"]#includeusing namespace std;typedef int(*ABCD)(char* p);//这里的ABCD可以用任意字符串替换,不过一般用类似CallBack的字符串int fun(char* p){ cout ...原创 2011-10-29 10:03:45 · 79 阅读 · 0 评论 -
各种基本数据类型的长度
[code="c++"]#include#includeusing namespace std;class MapSort{public: bool operator()(int size1,int size2){ return size1原创 2011-10-30 12:07:33 · 384 阅读 · 0 评论 -
可重入(reentrant)
在文档中多次出现reentrant,一直没弄清楚这个东东,现在明白了,其实简单说在函数中也就是相同输入能保证结果相同。原文:[url]http://blog.chinaunix.net/space.php?uid=11211848&do=blog&id=2895580[/url] 在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的...原创 2011-10-30 23:24:36 · 140 阅读 · 0 评论 -
memset,memcpy与memmove,strcpy
void *memset( void *buffer, int ch, size_t count );memset函数将buffer的前count项设置成chvoid *memcpy(void *dst,void *src,size_t count);memcpy函数用来进行内存拷贝,用户可以使用它来拷贝任何数据类型的对象。由src所指内存区域将count个字节复制到dst所指内存...原创 2011-10-31 11:29:34 · 101 阅读 · 0 评论 -
new/delete与malloc/free
malloc/free是c++/c语言的标准库函数,new/delete是c++运算符,它们都可以动态申请内存和释放内存。1.new/delete在实现上是调用了malloc和free函数,但是它们还调用了构造函数和析构函数。2.使用malloc函数进行内存分配必须指明要分配空间的具体大小;而用new则不需要,它能自动计算要分配的类型的大小。3.malloc函数对类型缺乏检查和限制,它...原创 2011-10-31 11:36:36 · 71 阅读 · 0 评论 -
虚函数的实现机制
在构造函数初始化时,会初始化一张虚表(所以构造函数不能为虚函数),这张表存放了虚函数的入口地址。如果派生类未实现基类的虚函数fun,则虚表中将存放基类中fun的入口地址,反之则存放派生类中的fun的入口地址。而析构函数一般推荐为虚函数,原因是当B派生自A类时,A* a = new B时,delete a;应该要执行A,B的析构这个虚指针一般放在类对象的尾端,这样可以保留基类C结构体的对象布...原创 2011-10-31 23:35:16 · 102 阅读 · 0 评论 -
动态链接库与静态链接库
动态链接库(DLL)是windows操作系统的基础,通常都不能直接运行,也不能接收消息.它们是一些独立的文件,其中包含能被可执行程序或其它DLL调用来完成某项工作的函数,只有在其它函数调用动态链接库时,它才发挥作用.Windows API中所有函数都包含在DLL中,其中有3个最重要的DLL,Kernel32.dll,它包括用于管理内存,进程和线程的各个函数,User32.dll,它包含用于...原创 2011-11-02 14:18:59 · 76 阅读 · 0 评论 -
c++异常
c++的异常要比java的麻烦一点...1.通常情况下,应该在异常处理器中使用引用参数而不是值参数,以防异常对象所包含的信息被切割掉,"..."能捕获任何异常一般放在最后,从而避免架空它后面的异常处理器。2.异常是在运行时而不是在编译时被检测的,因此,编译时存在的大量信息在处理异常的时候是不存在的3.如果没有任何一个层次的异常处理器能够捕获某种异常,一个特殊的库函数(terminate...原创 2011-03-27 22:51:01 · 80 阅读 · 0 评论 -
mark1
c++编程思想第一部分的题目已经做完了,现在向第二部分进发,发现有点力不从心了,看来书得看仔细点了。原创 2011-03-27 22:40:42 · 88 阅读 · 0 评论 -
编程规范
转自google,c++编程规范一.作用域1. 不在构造函数中做太多逻辑相关的初始化;2. 编译器提供的默认构造函数不会对变量进行初始化,如果定义了其他构造函数,编译器不再提供,需要编码者自行提供默认构造函数;3. 为避免隐式转换,需将单参数构造函数声明为explicit;4. 为避免拷贝构造函数、赋值操作的滥用和编译器自动生成,可目前声明其为private且无需实现;...原创 2011-03-24 10:07:53 · 105 阅读 · 0 评论 -
虚继承类长度
[code="c++"]#includeusing namespace std;class A{ char k[3];//2.由于内存对齐,故它的长度也是4public: virtual void aa(){}//1.它有一个虚指针,长度是4};//由于是虚继承要加上A的长度:8+8=16class B:virtual public A{...原创 2011-06-27 21:59:37 · 71 阅读 · 0 评论 -
运算符重载
这里面东西还挺多,先写点,以后慢慢补充吧operator++(a); //++aoperator++(a,int);//a++,int是一个哑元常量值Bird[code="c++"]#includeusing namespace std;class Bird{public: string s; static int i; int num;...原创 2011-03-06 12:08:15 · 82 阅读 · 0 评论 -
堆与栈的区别
栈(stack):由编译器自动分配,存放函数的参数值,局部变量值。系统自动分配,速度快。char *c = 'a';堆(heap):由程序员分配和释放,或结束时由操作系统回收。由new分配内存,速度慢,易产生碎片,但方便。 char *c = new char;全局区(static):存储全局变量和静态变量。...原创 2011-07-03 19:56:17 · 64 阅读 · 0 评论 -
valgrind
valgrind搜来搜去就一篇文章转来转去,郁闷啊,自己读文档得了文档地址:http://www.valgrind.org/docs/download_docs.html,有兴趣的朋友可以去看下,不过csdn也有中文版了,随便搜下就可以下载了1."definitely lost": your program is leaking memory -- fix it!“肯定丢失“:您的...原创 2011-03-11 17:54:21 · 78 阅读 · 0 评论 -
C++随机数
由于qrand()得到的是固定的伪随机数,而time得到的如果在时间小于一秒则相差不大,要想每次运行程序生成的不一样,我的做法是把这两种相加,这样下次运行得到的多个随机数就和上次不一样了. [code="c++"] //random rect QRectF randRect; long randTimeNum = time(NULL); randRectNum += Ran...原创 2010-12-04 19:20:24 · 148 阅读 · 0 评论 -
vs里用beyongcompare进行合并和比较
1.tools -> options -> source control -> visual studio team foundation server -> “configure user tools” button2.Add:Extension: .*Operation: CompareCompare: C:\Program Files\Beyond Compare 3\BCo...原创 2011-09-30 16:48:16 · 180 阅读 · 0 评论 -
继承和组合
组合:我们简单地在新类中创建已存在类的对象,因为新类是由已存在类的对象组合而成。构造函数的初始化表达式表允许我们显式地调用成员对象的构造函数构造函数和析构函数不能被继承operator=也不能被继承私有继承[code="c++"]#includeusing namespace std;class A{public: void f(){}};...原创 2011-03-16 23:21:48 · 73 阅读 · 0 评论 -
多态性与虚函数
晚捆绑(late binding=动态绑定(dynamic binding)=运行时绑定(runtime binding)如果一个函数在基类被声明为virtual,那么在所有的派生类中它都是virtual的。在派生类中virtual函数的重定义通常称为重写纯虚函数禁止对抽象类的函数以值方式调用。这也是防止对象切片(object slicing)的一种方法。通过抽象类,可以保证在向上...原创 2011-03-17 22:05:16 · 126 阅读 · 0 评论 -
使用动态链接库
1.先创建一个动态链接库的工程vs下,file->new project->win32 project->DLLT.h[code="c++"]#ifdef MYAPI_EXPORT #define MYAPI _declspec(dllexport)#else #define MYAPI _declspec(dllimport) #endifMYAPI ...原创 2011-11-02 16:36:19 · 114 阅读 · 0 评论 -
Rational
[code="c++"]#ifndef RATIONAL_H#define RATIONAL_H#includeclass Rational{public: int mNum; int mDen;public: Rational(int numerator = 0,int denominator = 1); Rational oper...原创 2011-04-02 19:34:52 · 171 阅读 · 0 评论 -
io读写
C[code="C"]#include#include#includeusing namespace std;int main(){ FILE* f = fopen("a","w"); fwrite("test",1,strlen("test"),f); fclose(f); f = fopen("a","r原创 2011-04-09 15:49:38 · 104 阅读 · 0 评论 -
pthread
[code="c++"]#include #include #include using namespace std;void *thread1(void *){ for(int i=0;i原创 2013-07-09 10:10:00 · 83 阅读 · 0 评论 -
输出类名
[code="c++"]#include using namespace std;class A{};class B{};int main(){ A a1; decltype(a1) a2; B b; int typeHashA1 = typeid(a1).hash_code(); int typeHashA2 = typeid(a2).hash...原创 2014-02-20 21:51:50 · 379 阅读 · 0 评论 -
GC与引用记数
根(Root)就是判断对象是否可被引用的起始点。至于哪里才是根,不同的语言和编译器都有不同的规定,但基本上是将变量和运行栈空间作为根。GC的三种基本方式1.标记清除:从根开始将可能被引用的对象用递归的方式进行标记,然后将没有标记到的对象作为垃圾进行回收。1.1标记压缩(标记清除的变形):将标记的对象不断压缩标记清除有一个缺点:分配了大量对象,并且其中只有一小部分存活的情况下...原创 2013-10-16 21:57:04 · 105 阅读 · 0 评论 -
GC的改良
分代回收:对分配不久,诞生时间较短的“年龄”对象进行重点扫描,应该就可以更有效地回收大部分垃圾。按照生成时间进行分代,刚刚生成不久的年轻对象划为新生代,而存活了较长时间的对象划为老生代。根据具体实现方式的不同,可能还会划分更多的代。首先从根开始一次常规扫描,找到存活的对象,这个步骤采用标记清除或者是复制收集算法都可以,不过大多数分代回收的实现,都采用了复制收集算法。需要注意的是,在扫描的过...原创 2013-10-17 22:05:38 · 93 阅读 · 0 评论 -
log
log.h[code="c++"]#ifndef __LOG_H__#define __LOG_H__#include #include namespace log{#define LOG_MAX_LENGTH 4096#define FLUSH_LINE 2#define EMERG 8 //#define ALERT 7 //...原创 2015-03-30 17:42:28 · 107 阅读 · 0 评论 -
trim
[code="c++"]/* trim from start*/string& ltrim(string &s){ s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun(std::isspace)))); return s;}/* tr...原创 2015-05-14 14:45:07 · 123 阅读 · 0 评论 -
查看glibc版本
strings /lib64/libc.so.6 |grep GLIBC_原创 2016-12-07 14:13:09 · 178 阅读 · 0 评论 -
rawsocket发送icmp包
[code="c++"]#include #include #include #include #include #include #include #include #include #include using namespace std;#define PING_DATA_LEN 56//ICMP消息头部struct ICMPH...原创 2017-09-06 09:54:39 · 1479 阅读 · 1 评论 -
const
[code="c++"]#includeusing namespace std;int main(){ int i = 0; const int constInt = 1; //constInt = 2; // 错误:向只读变量‘constInt’赋值 //int &intRef = constInt;//错误:将类型为‘int&’的引用...原创 2012-10-08 23:57:52 · 86 阅读 · 0 评论 -
声明与定义
extern int i;//声明但未定义int j;//声明并定义extern int a = 0;//定义,如果写在函数内是错的,但可以写在函数外Varibles must be defined exactly once but can be declared many times;变量只能被定义一次但可以被声明多次。...原创 2012-10-04 11:33:30 · 86 阅读 · 0 评论 -
windows下iconv转码
[url]http://ah-fu.iteye.com/blog/281563[/url] ICONV库是GNU提供的开源编码转换库,在LINUX下已经默认包含于系统中。对于开发者来说,已经存在/usr/include/iconv.h文件,链接时无需加入库名称。 在WINDOWS下需要下载库的安装程序:LibIconv for Windows库的网址为:http://gnuwi...原创 2012-08-28 17:07:11 · 297 阅读 · 0 评论 -
c++0x
[url]http://blog.csdn.net/pongba/article/category/158724[/url][url]http://imcc.blogbus.com/logs/106046323.html[/url]原创 2012-02-01 09:55:41 · 100 阅读 · 0 评论 -
libevent相关
voidevent_set(struct event *ev, evutil_socket_t fd, short events, void (*callback)(evutil_socket_t, short, void *), void *arg)相当于一个初始化结构体,其中的参数evutil_socket_t fd,short events,和一个void *arg将发送给c...原创 2012-02-03 11:04:20 · 82 阅读 · 0 评论 -
枚举转char
#define NAME(value) #value原创 2012-03-05 11:54:24 · 812 阅读 · 0 评论 -
#if0
#if 0#endif用于屏蔽注释中间的代码,避免注释嵌套,如果你的代码没注释,那么它与/**/的实际用途没啥区别#define a 1;#if a;//ok#end ifint a = 1;#if a;//虽然不会报错,但是没啥用#if中间的代码不会执行#end if;...原创 2012-03-07 13:45:58 · 95 阅读 · 0 评论 -
静态链接库
静态库是obj文件的一个集合,通常以.a为后缀,理论上执行速度比共享库和动态库要快(1%-5%)原创 2012-03-16 16:54:03 · 99 阅读 · 0 评论 -
消息队列
msgget函数用于创建一个新的消息队列或访问一个已存在的消息队列IPC_NOWAIT标志使得msgsend调用非阻塞:如果没有存放新消息的可用空间,该函数就马上返回.这个条件可能发生的情况包括:1.在指定的队列中已有太多的字节2.在系统范围存在太多的消息如果这两个条件中有一个存在,而且IPC_NOWAIT标志已指定,msgsnd就返回一个EAGAIN错误.如果这两个条件中有一...原创 2012-03-27 16:56:47 · 124 阅读 · 0 评论