c++基础
zyyoung
知识在于积累
展开
-
还在纠结于unsigned的类型范围吗
<br />无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。<br /><br />同样,在32位系统中一个char类型一般为8个bit,所以能存储的数据范围为-128~127,而unsigned char则是0~255,字符型所存储的数据是用来表示字符的,例如ASCⅡ或Unicode。<br />原创 2010-12-31 13:07:00 · 672 阅读 · 0 评论 -
CComBSTR to CString char*
CComBSTR tmp;CString srt = COLE2T(tmp);原创 2011-03-02 15:50:00 · 833 阅读 · 0 评论 -
守护进程
<br />#include "stdafx.h"#include <iostream>#include <windows.h> #include <stdio.h> #include <tchar.h> #include "atltime.h"using namespace std;int _tmain(int argc, _TCHAR* argv[]){ STARTUPINFO si; PROCESS_INFORMATION pi; //进程信原创 2011-02-10 09:14:00 · 603 阅读 · 0 评论 -
unicode和utf8编码的互相转换
<br />class CUtf8{public: static std::string Encode(const wchar_t * pSrc) { _uint32_ srcLen = wcslen(pSrc); std::string outBuf; char _b[3] = {0}; for (_uint32_ i = 0; i < srcLen; ++i) { _uint32_ len = UnicodeToUTF8(_b, *(pSrc +原创 2011-02-24 10:23:00 · 823 阅读 · 0 评论 -
精确计时:纳秒
<br />//纳秒__int64 Count(void){ _asm _emit 0x0F _asm _emit 0x31}CWinApp theApp;using namespace std;int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){ int nRetCode = 0; // 初始化 MFC 并在失败时显示错误 if (!AfxWinInit(::GetModuleHandle(N原创 2011-03-11 15:14:00 · 964 阅读 · 0 评论 -
gsoap库的使用技巧(使用类封装和接口的区别)
<br />从命令行生成顺序开始:<br /> <br />1.soapcpp2 -i -C -x a.h<br /> <br />生成的是类封装<br /> <br /> <br />2. soapcpp2 -C -x a.h<br /> <br />生产接口库<br /> <br />在使用过程中:<br /> <br />使用1,则编码无法更改 即<br /> <br />soap_set_mode(soap, SOAP_C_UTFSTRING)<br /> <br />导致某些返回utf8数据的接口原创 2011-03-22 14:52:00 · 1563 阅读 · 0 评论 -
客户端连续发包,服务器丢包?no,可能是缓冲区满了。
<br />socket发送数据时候先把数据发送到socket缓冲区中,之后接受函数再从缓冲区中取数据,如果发送端特别快的时候,缓冲区很快就被填满(socket默认的是1024×8=8192字节),这时候我们应该根据情况设置缓冲区的大小,可以通过setsockopt函数实现 int setsockopt( SOCKET s, int level, int optname, const char* optval, int optlen ); eg: int optVal = 1024*1024 ; int o原创 2011-04-15 15:26:00 · 3736 阅读 · 0 评论 -
error RC2135 :错误的解决方案
<br />定位到rc文件的后几行,找到类似文本,并改成如下形式:<br /> <br />主要区别就是:LANGUAGE 4,2<br />如下:<br /> <br />#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)<br />LANGUAGE 4,2<br />#pragma code_page(936)<br />#include "res/SkinControls.rc2" // 非 Microsoft Visual C++ 编辑资原创 2011-04-25 10:31:00 · 12011 阅读 · 0 评论 -
C++类继承关系问题(遗忘好久,拾起来)
<br />C++类继承关系问题<br /> 在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public<br />继承是最为常用的一种继承关系,代表了接口继承含义,而他们分别具体代表了什么含义呢?<br />1. public<br /> 从语义角度上来说,public继承是一种接口继承,根据面向对象中的关系而言就是,子类<br /> 可以代替父类完成父类接口所声明的行为,也就是必须符合“Liskov替换原则(LSP)”,<br /> 此时子类可以原创 2011-05-06 16:45:00 · 1046 阅读 · 0 评论 -
boost pool性能对比
<br />// testPool.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <boost/pool/object_pool.hpp>#include <boost/pool/object_pool.hpp>#include <boost/pool/pool.hpp>using namespace std;using namespace boost;class member{public:原创 2011-03-01 12:32:00 · 2323 阅读 · 1 评论 -
class的sizeof
<br />#include<iostream.h> class a {}; class b{}; class c:public a{ virtual void fun()=0; }; class d:public b,public c{}; int main(){ cout<<"sizeof(a)"<<sizeof(a)<<endl; cout<<"sizeof(b)"<<sizeof(b)<<endl; co原创 2011-01-27 16:59:00 · 6025 阅读 · 1 评论 -
memcpy() memmove()和memccpy()
<br />相关函数: bcopy(), memccpy(), memcpy(), strcpy(), strncpy()表头文件: #include <string.h>定义函数: void *memmove(void *dest, const void *src, size_t n);函数说明: memmove()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址上。不同的是,当src和dest所指的内存区域重叠时,memmove()仍然可以正确的处理,不过原创 2011-01-24 13:25:00 · 852 阅读 · 0 评论 -
需善于使用namespace
<br />我们经常在很多头文件中定义繁琐的函数,不免遇到英文单词匮乏,同名函数的出现,若此时某一文件同时包含了这2个文件,则造成编译异常。<br /> <br />此时我们就可以给不同的模块,定义自有的namespace,在使用的时候,用域操作::以用这些函数或变量。原创 2011-01-04 16:52:00 · 805 阅读 · 0 评论 -
处理器的大小端
<br />为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x11原创 2011-01-05 09:43:00 · 1473 阅读 · 1 评论 -
经典的C++开源库 做大项目的时候别忘了利用上
<br />经典的C++库 <br /> STLport-------SGI STL库的跨平台可移植版本,在以前有些编译器离符合 <br /> 标准比较远的情况下 那时还是有用的,当然目前vc71已经比较接近标准了, <br /> 故目前不怎么用它了。 <br /> Boost---------准标准库, 功能强大 涉及能想的到的大部分非特别领域的算法, <br /> 有一个大的C++社区支持 <br /> WxWindows-----功能强大的跨原创 2011-01-06 14:30:00 · 1774 阅读 · 0 评论 -
数组初始化还记得吗
<br /> BYTE data[] = {"123456789"}; BYTE data1[] = {1,2,3,4,5,6,7,8,9}; BYTE num[]={'1','2','3','4','5','6','7','8','9'}; char * str = "123456789"; char str1[] = '1','2','3','4','5','6','7','8','9'};<br /> <br />以上几个定义的数组一样吗?<br /> <br />你要说一样那你就错了原创 2011-01-06 10:01:00 · 549 阅读 · 0 评论 -
placement new
<br />placement new 是重载operator new 的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operator new 和 operator delete能够被替换)。<br />void *operator new( size_t, void *p ) throw() { return p; }<br />placement new的执行忽略了size_t参数,只返还第二个参数。其结果是允许用户把一个对象放到一个特定的地方,达到调用构造函数的效果。 <b原创 2011-01-06 15:18:00 · 1527 阅读 · 0 评论 -
一个算法题:BYTE[0]=Ox12 BYTE[1]=0x34 BYTE[2]=0x56 最后要转换成字符串123456
<br />俺偷懒了<br /> <br />// byte2char.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"typedef unsigned char BYTE;BYTE data[]={ 0x12,0x34,0x56};int _tmain(int argc, _TCHAR* argv[]){ char tmp[64]={0}; for (int i=0;i<sizeof(data)/sizeof原创 2011-01-19 23:16:00 · 2902 阅读 · 0 评论 -
vs71编译boost 1.45库
<br />运行bootstrap.bat生产bjam.exe<br /> <br />控制台运行 bjam stage<br /> <br />等待3-10分钟,视机器情况而定<br /> <br />ok<br /> <br />发现state目录下生产的lib库了把<br /> <br />大功告成。原创 2011-01-20 10:16:00 · 669 阅读 · 0 评论 -
多态 和 virual 析构的关系
<br />namespace B{ class CBase { public: CBase() { printf("<Base>+/n"); } virtual ~CBase() //virtual 加不加 打印结果不一样哦 { printf("<Base>-/n"); } protected: private: }; class CChild:public CBase { public: CChild原创 2011-05-06 17:05:00 · 766 阅读 · 0 评论