随笔分类 -  C/C++

有关C/C++的有些技术帖
一些C++内容的总结(2013.10.17)
摘要:1.using namespace std;使用的是C++标准库当中的一些变量,比如cout,cin等。但是using namespace std作用域只对当前文件内作用,所以using namespace std一般不会包含在stdafx.h预编译头当中,而是分别包含在.h文件当中或者需要使用的.cpp文件当中和#include 的对比,#include相当于将所include的文件在编译的时候,包含到所include的位置,其实际使用的是include文件当中的声明或者定义。而using namespace 不同,这样使用的是namespace XX当中的一些类,函数或者其他2.stdaf 阅读全文

posted @ 2013-10-18 00:27 瀚海一漂一九九一 阅读(154) 评论(0) 推荐(0)

ifndef/define/endif作用和用法
摘要:问题:ifndef/define/endif”主要目的是防止头文件的重复包含和编译,偶只知道这个概念不懂的是怎么个用法,和为什么要用它~~高手请指点一下~~谢谢~~~!!!--------------------------------------------------------------------------------------------------用法:.h文件,如下:#ifndef XX_H#define XX_H...#endif这样如果有两个地方都包含这个头文件,就不会出现两次包含的情况 。。因为在第二次包含时 XX_H 已经有定义了,所以就不再 include了--- 阅读全文

posted @ 2013-08-22 13:12 瀚海一漂一九九一 阅读(675) 评论(0) 推荐(0)

三道题(关于虚表指针位置/合成64位ID/利用栈实现四则运算)
摘要:第一题 C++标准中,虚表指针在类的内存结构位置没有规定,不同编译器的实现可能是不一样的。请实现一段代码,判断当前编译器把虚表指针放在类的内存结构的最前面还是最后面。第二题 在游戏中所有物品的实例都有一个唯一的ID,用于区分这个物品的唯一性。每个物品的ID在物品产生时就被分配了,此后将永远不会改变。每个服务器具有一个服务器ID,不同的服务器ID均不会重复,其值在0-65535之间。请设计一个生成64位的物品ID的算法,算法要求任何时刻、任何不同的服务器中生成的物品ID均不会重复。第三题 在游戏服务端与客户端的通信中,数据的正确性是非常重要的。实际运营中发现,有一些玩家使用工具重复发送数据包,比 阅读全文

posted @ 2013-07-31 18:42 瀚海一漂一九九一 阅读(459) 评论(0) 推荐(0)

string类的实现
摘要:12. 已知String类定义如下:class String{public: String(const char *str = NULL); // 通用构造函数 String(const String &another); // 拷贝构造函数 ~String(); // 析构函数 String& operater =(const String &rhs); // 赋值函数private: char* m_data; // 用于保存字符串};尝试写出类的成员函数实现。答案:String::String(constchar*str){if ( str == NULL ) / 阅读全文

posted @ 2013-07-22 11:23 瀚海一漂一九九一 阅读(217) 评论(0) 推荐(0)

关于引用的一个小笔记
摘要:template T maxValue(T& value1,T& value2,T& value3){ T tem=value1; if(value1<value2) tem=value2; if(tem<value3) tem=value3; return tem;}void main(){ int a=1,b=2,c=3; cout<<maxValue(1,2,3);//编译错误,因为函数使用的引用,相当于int&t=1,是错误的,t并未分配空间,而1是无名常量,无法引用 } 阅读全文

posted @ 2013-07-21 11:44 瀚海一漂一九九一 阅读(124) 评论(0) 推荐(0)

有关内联函数的总结
摘要:原因:对于函数的调用,开销较大,但是使用inline内联的时候,调用函数的时候,编译器会将代码副本展开到函数调用处,所以,这样子程序的代码规模会比较大,但是能减少函数调用开销,提高性能。a.由程序员在函数中加inline关键字,是“建议”编译器将函数内联,编译器保留是否内联的最终权利,一般较小的函数,编译器给予内联,编译器有时忽略inline,不给于内联。b.对内联函数的任何修改,都需要重新编译客户端中的代码。理解:程序的编译和链接过程,是通过各个部分的编译之后,生成目标模块,再进行链接。①内联函数模块+②客户端模块(含内联函数调用)->链接->exe内联函数被修改,客户端中展开的 阅读全文

posted @ 2013-07-21 11:30 瀚海一漂一九九一 阅读(179) 评论(0) 推荐(0)

常量字符串为什么位于静态存储区?
摘要:char *c="chenxi";书上说: "chenxi"这个字符串被当作常量而且被放置在此程序的内存静态区。那一般的int i=1;1也是常量,为什么1就不被放置在此程序的内存静态区了呢?请高手指点!对于字符串的时候,牵涉到一个指针变量,指针变量中存放的是地址,但是int a=1,当中只牵涉到一个变量,那就是int变量,int变量当中存放的便只有1,但是字符串常量的时候,牵涉到指针变量和字符串存放的内存,设计到两个内存存放。所有的字符窜常量都被放在静态内存区因为字符串常量很少需要修改,放在静态内存区会提高效率例:char str1[] = " 阅读全文

posted @ 2013-07-07 14:16 瀚海一漂一九九一 阅读(509) 评论(0) 推荐(0)

(堆,栈内存,静态存储区)几种内存分配的策略
摘要:字符串常量,放在哪个存储区呢?是“自动存储区”还是“静态存储区”中?比如:char*pstr="helloworld!";这里,"helloworld!"是一个字符串常量,pstr是在栈中的变量。我想问,字符串常量,在哪个内存区域分配空间呢?好像应该不是在“栈区“分配空间吧!!!一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注 阅读全文

posted @ 2013-07-07 14:15 瀚海一漂一九九一 阅读(711) 评论(0) 推荐(0)

C/C++雷区之内存管理
摘要:C++雷区之内存管理 伟大的Bill Gates 曾经失言: 640K ought to be enough for everybody — Bill Gates 1981 程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。1、内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。常量字符串也是存放在静态存储区。(2)在栈上创建。在执... 阅读全文

posted @ 2013-07-07 14:14 瀚海一漂一九九一 阅读(166) 评论(0) 推荐(0)

无符号数和有符号数字操作的一些注意事项
摘要:无符号数与有符号数比较大小时注意的一个问题关键点:这是因为在C语言操作中,如果遇到无符号数与有符号数之间的操作,编译器会自动转化为无符号数来进行处理,因此a=20,b=4294967166,这样比较下去当然b>a了。看下面的代码会出现什么结果,程序判断不出 a > -100,看来无符号数与有符号数比较可要小心了UINT a = 10;if(a > -100){ MessageBox(_T("OK"));}下面结果也一样UINT a = 10;int b = -100;if(a > b){ MessageBox(_T("OK")); 阅读全文

posted @ 2013-07-06 18:01 瀚海一漂一九九一 阅读(344) 评论(0) 推荐(0)

C/C++的基本数据类型
摘要:1.下表格列出了主要的数据类型和范围大小等。TypeSize数值范围无值型void0 byte无值域布尔型bool1 bytetrue false有符号短整型short [int] /signed short [int]2 byte-32768~32767无符号短整型unsigned short [int]2 byte0~65535有符号整型int /signed [int]4 byte-2147483648~2147483647无符号整型unsigned [int]4 byte0~4294967295有符号长整型long [int]/signed long [int]4 byte-21474 阅读全文

posted @ 2013-07-06 17:55 瀚海一漂一九九一 阅读(621) 评论(0) 推荐(0)