随笔分类 -  C++

摘要:最近用zeromq 去实现游戏资源进程相关功能。 这两天遇到一个C++项目的编译问题: a.lib 引用到 zeromq 的库 libzmq.lib , b.exe 引用到 a.lib。 但在编译 b.exe 的时候却还一直报 a.lib 找不到 zeromq库相关的函数定义,而a 项目的编译是正常的。 搞了半天都没解决问题,后来找身边的同事帮忙查查,也找不到根源所在。 不得已,只能求助于主程了。他看了一下那报错,在明确了a 项目里已加了zeromq库的相关设置后,就直接下结论是 a 项目里有关zeromq库的预处理宏没定义。 只需在 a 的项目设置的预处理定义里加上 zeromq 的宏 ZM 阅读全文
posted @ 2012-06-18 13:29 毛志谦 阅读(412) 评论(1) 推荐(0) 编辑
摘要:今天在csdn看到有人出了一道考数组长度的问题,感觉挺不错的,稍稍归纳一下,记录在案。 char test[] = {0x01,0x02,0x03}; int a = strlen(test);int b = sizeof(test); 则 a值为不确定值,因为 strlen 判断字符串结束的标志是指针走到值为 '\000' 的地址处,'\000' 在十六进制里的表示就是 0x00。 b 值为 3,sizeof是返回变量所占内存数。 若 chartest[] = {0x01,0x00,0x03}; 则 a = 1 因为 0x00 为字符串结束符。b依然为3。 若 阅读全文
posted @ 2012-02-29 13:50 毛志谦 阅读(479) 评论(0) 推荐(1) 编辑
摘要:前一阵子做一个客服回复玩家问题工具,要用到读写XML文件的数据,同事推荐用TinyXML,于是,开始了我与TinyXML的亲密之旅。先简单说说配置:首先下载TinyXML库的文件,然后在 TinyXML 的目录里面找到tinystr.h, tinyxml.h,tinystr.cpp,tinyxml.cpp, tinyxmlerror.cpp,tinyxmlparser.cpp六个文件加入到自己的项目中去,在相应的工程文件中加入两个头文件 #include "tinyxml.h" ,#include "tinystr.h",在 tinystr.cpp,ti 阅读全文
posted @ 2011-11-08 01:15 毛志谦 阅读(3132) 评论(1) 推荐(0) 编辑
摘要:今天一同事闲时看了一些C++代码,于是问我 new 一个类型时后面加括号和不加括号有什么区别?如下:A* test1 = new AA* test2 = new A( ) 我竟一时答不上来。 后来查阅了一些资料,整理出一些结论,正确与否,还需认证。对于自定义的类型,两种写法是一致的。而对于内建类型,区别在于调用的构造函数不一样,例如:int* a = new int ; // a 的值不确定 int* b = new int(); // b的值被初始化为0 对于此种情况,后者比前者多了一个 memset 。 在CSDN的论坛上,也有关于这个问题的争议,不够貌似还没有最后的结论。 阅读全文
posted @ 2011-09-28 00:23 毛志谦 阅读(220) 评论(0) 推荐(0) 编辑
摘要:如果贸贸然让我说出关于题目相关的知识,可能一时还说不清,看来对这方面还得熟记,现整理之后记录在案,顺便理顺一下头绪。从静态存储区域分配:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。静态分配的区域的生命期是整个软件运行期,就是说从软件运行开始到软件终止退出。只有软件终止运行后,这块内存才会被系统回收 在栈上创建:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。在栈中分配的空间的生命期与这个变量所在的函数和类相关。如果是函数 阅读全文
posted @ 2011-09-20 13:12 毛志谦 阅读(2097) 评论(0) 推荐(0) 编辑
摘要:什么是双指针? 例如:char **p; p即为双指针。 当我们需要修改指针变量本身的值的时候,可以使用双指针。 先看一个示例:voidgetmemory(char*ptr){ ptr=(char*)malloc(20);}voidgetbuffer(){ char*buffer=NULL; getmemory(buffer); } 示例想要修改buffer本身这个指针的值,但是getmemory(buffer)之后,buffer的值还是NULL。由于ptr是局部变量,对ptr做修改无法反馈到getbuffer域中。 修改为以下示例即可:voidgetmemory(char**p){*p=(c 阅读全文
posted @ 2011-01-19 18:51 毛志谦 阅读(512) 评论(0) 推荐(0) 编辑
摘要:1sizeof不是函数,而是运算符。2 编译器解析的时候是忽略类型名的,const 离谁近就修饰谁。 const int *p; //p 可变,p 指向的对象不可变intconst *p; // p 可变,p 指向的对象不可变 int *const p; // p 不可变,p 指向的对象可变 const int *const p; //指针p 和p 指向的对象都不可变3 当你需要输出的内容不包括变量或常量时适合使用puts(),而不用printf函数4 volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关 阅读全文
posted @ 2011-01-04 13:13 毛志谦 阅读(132) 评论(0) 推荐(0) 编辑
摘要:void abort(void); 功 能: 异常终止一个进程int abs(int i); 功 能: 求整数的绝对值 double acos(double x); 功 能: 反余弦函数double asin(double x); 功 能: 反正弦函数double atan(double x); 功 能: 反正切函数double atan2(double y, double x); 功 能: 计算Y/X的反正切值double atof(const char *nptr); 功 能: 把字符串转换成浮点数int atoi(const char *nptr); 功 能: 把字符串转换成整型数 lo 阅读全文
posted @ 2010-12-16 09:14 毛志谦 阅读(191) 评论(0) 推荐(0) 编辑
摘要:#define _CRTDBG_MAP_ALLOC //显示内存块类型和内存块分配编号 #include <crtdbg.h> ........... //在输出窗口查看内存泄漏信息,在程序结束前加入: _CrtDumpMemoryLeaks(); //退出程序位置固定时 或者_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );//当退出位置不固定时 运行程序,看输出信息: output内存泄漏信息结构: 1.内存分配的编号(大括弧中的数字) 2.内存块的类型(普通型、客户端型、CRT型) 3.16进制表示 阅读全文
posted @ 2010-11-29 16:36 毛志谦 阅读(269) 评论(0) 推荐(0) 编辑
摘要:这两天偶尔翻看一本C++的书籍时,看到一个继承的知识点竟有点陌生的感觉。也许是之前恰好没接触过,也许是太久没接触罢了,现在究竟是忘记了。应该记下来,以作备忘,顺便罗嗦一下继承的概念,嗯嗯。 那就是C++中的访问声明。 众所周知,C++有三种继承方式,公有继承,保护继承,私有继承。公有继承,基类的公有和保护成员在派生类的性质不变。保护继承,基类的公有和保护成员在派生类均变成保护成员。保护成员是专为继承机制而设的,使其在派生类中可见,类外不可见。私有继承,基类的所有成员在派生类均变成私有成员。 问题在于,当我用某种继承方式时,却想把基类的某个成员变成另外一种访问方式,怎样去实现呢?于是,这就用到了 阅读全文
posted @ 2010-10-25 08:31 毛志谦 阅读(225) 评论(0) 推荐(0) 编辑