
C++
文章平均质量分 79
peter_teng
这个作者很懒,什么都没留下…
展开
-
关于C++ const:const变量,cosnt输入参数,const返回值,const成员函数
看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设转载 2012-12-10 11:41:49 · 1648 阅读 · 0 评论 -
异步选择模型中FD_WRITE
我本想把发送和接收分开作为两部分,但是最后我决定只略微解释一下 FD_READ ,留下更多的时间来说明更复杂的 FD_WRITE , FD_READ 事件非常容易掌握. 当有数据发送过来时, WinSock 会以 FD_READ 事件通知你, 对于每一个 FD_READ 事件, 你需要像下面这样调用 recv() :int bytes_recv = recv(wParam, &data,转载 2013-09-11 17:21:55 · 1171 阅读 · 1 评论 -
strcpy与memcpy的区别
strcpyC语言标准库函数原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include string.h>功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。原创 2013-07-08 18:19:59 · 9584 阅读 · 0 评论 -
多线程服务器的适用场合
目录(?)[+]正名与前文相同,本文的“进程”指的是 fork() 系统调用的产物。“线程”指的是 pthread_create() 的产物,而且我指的 pthreads 是 NPTL 的,每个线程由 clone() 产生,对应一个内核的 task_struct。本文所用的开发语言是 C++,运行环境为 Linux。首先,一个由多台机器组成的转载 2013-10-09 11:14:09 · 1581 阅读 · 0 评论 -
C运行时库CRT(C Run-time Library)详解
一、什么是C运行时库1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C 语言内核开发出来之后,Dennis Ritchie 和 Brian Kernighan 就用 C 本转载 2013-09-24 10:26:21 · 3235 阅读 · 0 评论 -
智能指针实现代码--定时器实例
话不多说,直接看实现源码。// 单线程模型,自增减没有互斥处理class SingleThread{public: static long _Increment(long* p){ return ++(*p); } static long _Decrement(long* p){ return --(*p); }};// 计数器类templateclass Counte原创 2013-09-23 17:39:42 · 1297 阅读 · 0 评论 -
C++空类中的默认函数
定义一个空的C++类,例如class Empty{}一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,一般编译过去就相当于class Empty{public:Empty(); // 缺省构造函数Empty( const Empty& ); // 拷贝构造函数~Empty(); //原创 2013-09-26 10:48:43 · 2135 阅读 · 0 评论 -
网络游戏服务器架构2
在《网络游戏服务器架构》这篇文章中,我描述了我们游戏中的服务器基本结构。游戏中4大服务器session, gateway, dbx, world,它们之间通过sock进行通信。四大服务器的连接过程是这样的:1.先启动dbx,dbx监听端口3000,供其他服务器连接2.接下来是session,它连接dbx(3000),同时监听2300,供gateway连接,并且监听2500,供wor原创 2013-10-18 15:20:59 · 1749 阅读 · 0 评论 -
分布式系统:分布式部署,监控与进程管理
目录(?)[-]境界1全手工操作境界2使用零散的自动化脚本和第三方组件境界3自制机群管理系统集中化配置境界4机群管理与 naming service 结合约定:本文只考虑 Linux 系统,文中涉及的“服务程序”是以 C++ 或 Java 编写,编译成二进制可执行文件(binary 或 jar),程序启动的时候一般会读取配置文件(或者以其他方式获得配置信息),同一个程序每个服务进程转载 2013-12-20 10:50:15 · 2974 阅读 · 0 评论 -
深入浅出cocos2d-x(1):Cocos2d-x 中“HelloLua” 深入分析
我们来看一下Cocos2d-x的HelloLua示例工程。首先编译运行一下这个工程,当然,因为我在HelloWorld工程中改动了CCApplication的run函数和initInstance函数,所以这里要修改一下,与HelloWorld保持一致才能编译成功。哇!一个很COOL的农场游戏。 这几乎是我转载 2013-12-26 11:55:49 · 1597 阅读 · 0 评论 -
深入浅出cocos2d-x(2):Cocos2d-x中LUA脚本引擎深入分析
好了,不说废话,本周奉上一篇初级入门教程博文,Cocos2d-x中的LUA引导与入门。做为惯例,一切都是以HelloWorld的样例为准。我们今天学习用LUA来完成一版HelloWorld。 大家既使没有看过我的“HelloWorld 深入分析”一文,想必也无数次运行过Cocos2d-x里的HelloCpp工程,对于运行的结果画面熟烂于心。我们回想一下,这转载 2013-12-26 12:09:29 · 2456 阅读 · 0 评论 -
c++中的内存字节对齐
最近游戏项目开发中遇到一个小问题,客户端unity开发用的C#,但需要调用C++中的函数进行消息加密,调用DLL中的接口时,C#中的结构体需要传入到C++中进行操作,但是由于C#中的消息头定义的比较苟且,没有提供一个跟C++中一一对应的结构体,导致加密后再解密出错,最后发现时内存字节对齐的问题,在C++消息头定义处加入#pragma pack(push, 1)#pragma pack(原创 2017-06-30 14:30:09 · 587 阅读 · 0 评论 -
C/C++ 内存分配
内存分配方式内存分配方式有三种:[1] 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量, static 变量。[2] 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中 ,效率很高,但是分配的内存容量有限。[3] 从堆上分配,亦称动态内转载 2013-09-11 16:57:27 · 1054 阅读 · 0 评论 -
windows线程同步的总结
一 线程1)如果你正在编写C/C++代码,决不应该调用CreateThread。相反,应该使用VisualC++运行期库函数_beginthreadex,退出也应该使用_endthreadex。如果不使用Microsoft的VisualC++编译器,你的编译器供应商有它自己的CreateThred替代函数。不管这个替代函数是什么,你都必须使用。2)因为_beginthreadex和原创 2013-09-06 15:57:01 · 8021 阅读 · 0 评论 -
CreateThread 与 _beginthreadex / _beginthread 及AfxBeginThread的区别
1. CreateThread是Windows的API函数(SDK函数的标准形式,直截了当的创建方式,任何场合都可以使用),提供操作系统级别的创建线程的操作,且仅限于工作者线程。不调用MFC和RTL的函数时,可以用CreateThread,其它情况不要轻易。AfxBeginThread:MFC中线程创建的MFC函数,首先创建了相应的CWinThread对象,然后调用CWinThread::转载 2013-09-06 16:46:35 · 1553 阅读 · 0 评论 -
C++ 函数中的返回值为引用
引用是给变量取一个别名,所以引用传递会直接进行变量本身的传递。它的最大好处是可以把别处对变量的改变保留下来,第二好处是它提高了性能:如果函数的返回值是一个引用,那么,如上文所说,它会节约一组构造、赋值和析构过程。但是,函数返回引用往往会带来一些意想不到的错误:比如返回临时变量的引用。//一个错误的函数int &Max(int i, int j){ return i>j ? i :原创 2012-12-27 15:59:46 · 1171 阅读 · 0 评论 -
避免对函数中继承得来的默认参数值进行重定义
让我们开门见山的讨论本话题:继承一个含有默认参数值的虚函数。此情况下,本条目的证明问题则显得十分了然:虚函数是动态绑定的,而默认参数值是静态绑定的。你说啥?静态绑定于动态绑定之间的区别已经让你头晕目眩了?(静态绑定又称早期绑定,动态绑定又称晚期绑定,这是官方说法。)我们只好复习一下了。一个对象的静态类型就是你在对其进行声明时赋予它的类型。请考虑下面的类层次结构: /原创 2012-12-27 11:01:47 · 2162 阅读 · 1 评论 -
C++中指针和引用的区别
从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传原创 2012-12-28 11:34:06 · 664 阅读 · 0 评论 -
字符型指针变量与字符数组的区别
(1)分配内存 设有定义字符型指针变量与字符数组的语句如下: char *pc ,str[100]; 则系统将为字符数组str分配100个字节的内存单元,用于存放100个字符。而系统只为指针变量pc分配4个存储单元,用于存放一个内存单元的地址。(2)初始化赋值含义 字符数组与字符指针变量的初始化赋值形式相同,但其含义不同。例如: char str[ ] ="I am转载 2013-07-08 16:29:49 · 1446 阅读 · 0 评论 -
FSM:网络游戏开发中的有限状态机(实践篇)
上一篇文章《FSM:网络游戏开发中的有限状态机(理论篇)》中,讲解了FSM的基础知识。这里,我结合图形及具体例子,讲解下FSM在实际开发中的运用。首先,图解下上篇文章中提到的各种action。1.InputAction:某状态下收到某事件,输出相应动作。这里不发生状态变更,只是对输入事件的一个响应。属于瞬时动作。2.LeaveAction:离开某一状态时的相应动作。这个原创 2013-06-22 16:45:44 · 8603 阅读 · 2 评论 -
数组跟指针
一、数组: 数组是由类型名、标识符和维数组成的复合数据类型,类型名规定了存放在数组中的元素的类型,而维数则指定数组中包含的元素个数。 a.数组定义中的类型名可以是内置数据类型或类类型;除引用之外,数组元素的类型还可以是任意的复合类型。没有所有元素都是引用的数组。 b.数组的定义和初始化:数组的维数必须用值大于等于1的常量表达式定义。此常量表达转载 2013-07-08 17:39:01 · 1113 阅读 · 0 评论 -
数组指针与指针数组 函数指针与指针函数
数组指针的定义数组名的指针,即数组首元素地址的指针。即是指向数组的指针。例:int (*p)[10]; p即为指向数组的指针,又称数组指针。数组指针与指针数组数组指针是指向数组首元素的地址的指针,其本质为指针;指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。例如:{int a[4]原创 2013-07-12 10:46:04 · 1118 阅读 · 0 评论 -
c++应用程序文件的编译过程
这里讲下C++文件的编译过程及其中模板的编译过程;一:一般的C++应用程序的编译过程。 一般说来,C++应用程序的编译过程分为三个阶段。模板也是一样的。在cpp文件中展开include文件。将每个cpp文件编译为一个对应的obj文件。连接obj文件成为一个exe文件(或者其它的库文件)。下面分别描述这几个阶段。1.include文件的展开。 includ原创 2013-07-05 15:30:28 · 5404 阅读 · 5 评论 -
C++中模板的特化与偏特化
1.引言C++中的模板分为类模板和函数模板,虽然它引进到C++标准中的时间不是很长,但是却得到了广泛的应用,这一点在STL中有着充分的体现。目前,STL在C++社区中得到了广泛的关注、应用和研究。理解和掌握模板是学习、应用和研究以及扩充STL的基础。而STL模板实例中又充斥着大量的模板特化和偏特化。2.模板的定义(1) 类模板定义一个栈的类模板,它可以用来容纳不同的数据类型原创 2013-08-01 10:21:50 · 7574 阅读 · 2 评论 -
C/C++语言中#的神奇作用:把宏参数字符串化/贴合宏参数
宏中"#"和"##"的用法 一、一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.#define STR(s) #s #define CONS(a,b) int(a##e##b)printf(STR(vck)); // 输出字符串"vck" printf("%d\n", CONS(原创 2013-08-03 11:49:59 · 23939 阅读 · 3 评论 -
LoadLibrary文件路径及windows API相关的文件路径问题
LoadLibraryHMODULE WINAPI LoadLibrary( _In_ LPCTSTR lpFileName);Loads the specified module into the address space of the calling process. The specified module may cause other mo原创 2013-08-05 20:22:43 · 19897 阅读 · 1 评论 -
c++游戏服务器http与web前端交互
html页面代码如下: command: server_id: command_cls: command_content: type: account: money: order_no: platform:原创 2017-07-19 15:09:45 · 2685 阅读 · 0 评论