随笔分类 -  C++

摘要:In C++, dynamic binding happens when a virtual function is called through a reference(or a pointer) to a base class.Calls to virtual functions made th... 阅读全文
posted @ 2015-10-27 12:20 cavehubiao 阅读(275) 评论(0) 推荐(0)
摘要:I find it easiest to understand move semantics with example code. Let's start with a very simple string class which only holds a pointer to a heap-all... 阅读全文
posted @ 2014-08-08 14:59 cavehubiao 阅读(254) 评论(0) 推荐(0)
摘要:Any class that manages a resource (awrapper, like a smart pointer) needs to implementThe Big Three. While the goals and implementation of the copy-con... 阅读全文
posted @ 2014-08-08 14:33 cavehubiao 阅读(217) 评论(0) 推荐(0)
摘要:转自stackoverflow和wiki In short, CRTP is when a class A has a base class which is a template specialization for the class A itself. E.g.template class ... 阅读全文
posted @ 2014-08-05 13:20 cavehubiao 阅读(343) 评论(0) 推荐(0)
摘要:static_cast它主要有如下几种用法:用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类指针或引用)时,由于没有动态类型检查,所以是不安全的。用于基本数据类型之间的转换,如把int转换成char,把... 阅读全文
posted @ 2014-04-19 19:30 cavehubiao 阅读(441) 评论(0) 推荐(0)
摘要:TIME_WAIT状态原理----------------------------通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释),进入CLOSED状态... 阅读全文
posted @ 2014-04-19 18:57 cavehubiao 阅读(843) 评论(0) 推荐(0)
摘要:PrecedenceOperatorDescriptionExampleAssociativity1()[]->.::++--Grouping operatorArray accessMember access from a pointerMember access from an objectSc... 阅读全文
posted @ 2014-04-17 10:58 cavehubiao 阅读(182) 评论(0) 推荐(0)
摘要:OSI七层网络模型由下至上为1至7层,分别为物理层(Physical layer),数据链路层(Data link layer),网络层(Network layer),传输层(Transport layer),会话层(Session layer),表示层(Presentation layer),应用层(Application layer)。 应用层,很简单,就是应用程序。这一层负责确定通信对象,并确保由足够的资源用于通信,这些当然都是想要通信的应用程序干的事情。 表示层,负责数据的编码、转化,确保应用层的正常工作。这一层,是将我们看到的界面与二进制间互相转化的地方,就是我们的语言与机器语... 阅读全文
posted @ 2014-04-09 23:34 cavehubiao 阅读(522) 评论(0) 推荐(0)
摘要:signed char ch=0xe0;unsigned int i=ch;那么i是多少?这样就要涉及到一些补全知识,对于signed类型 右移补符号位,如果符号为是0就补0,1就补1,无符号当然都是0补0;而这里i到底是根据i本身的符号位补还是ch的符号位补?输出i结果是429......,可知补全的是1,那么说明是根据ch来补全了,这个记下. 阅读全文
posted @ 2014-04-09 23:15 cavehubiao 阅读(107) 评论(0) 推荐(0)
摘要:bss段:BSS段(bsssegment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文BlockStarted by Symbol的简称。BSS段属于静态内存分配。data段:数据段(datasegment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。text段:代码段(codesegment/textsegment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读,某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。ro 阅读全文
posted @ 2014-04-09 22:31 cavehubiao 阅读(116) 评论(0) 推荐(0)
摘要:也许大家都有过这样的疑惑:const_cast可以去除一个常量的const属性,去除const属性后应该可以对“常量”进行修改,通过调试器发现内存中的值是被改变的,可是再传递这个“常量”的时候,值却一直保持原状,实在古怪,在Windows下用VC、尝试如此,在Linux下用g++尝试也如此,我原先以为和编译器的优化选项有关系,把所有优化选项关闭,照样没用,为什么?写了个程序进行测试:双击代码全选1234567891011121314151617181920212223242526272829#include using namespace std;void Fun(int &value 阅读全文
posted @ 2014-04-09 17:04 cavehubiao 阅读(377) 评论(0) 推荐(0)
摘要:上次看到的题目仅是判断是否有环,如果要求出环的起点位置又该如何呢?这里看到关于快慢指针的证明,感觉有必要记下来下。假设链表头到环头距离k,环长度n,指针相遇位置距离环头为x,慢指针直到相遇时移动距离为m那么有m=k+x+pn,2m-m=qn;那么有qn=k+x+pn,即k+x=(q-p)n;可以发现从表头到相遇位置的距离是环长的整数倍。那么,将slow或者fast任意一个指针从相遇位置直接移动到表头。然后while(slow!=fast)slow++,fast++(这里fast也只一次一步)那么最后slow=fast时,一定是环头位置。node * f(node* head){ node* . 阅读全文
posted @ 2014-03-24 18:06 cavehubiao 阅读(240) 评论(0) 推荐(0)
摘要:今天写程序时遇到的两个错误Block_TYPE_IS_VALID...这个后来发现是在对Delete过的内存再次Delete了。Heap corruption detected这个开始调了好久,后来发现是delete s出错,我的程序大致是这样的char*s =new char[MSG_LENGTH]();itoa(MSG_TYPE,s,10);...delete s;这里MSG_LENGTH是4,MSG_TYPE是1001-1010的某个数itoa我只知道可以把整数转换成字符串,所以我想MSG_TYPE既然是4位整数,那么s给4位也就可以呢?然后就出错了。搞了好久,网上查别人有类似的是ssp 阅读全文
posted @ 2014-01-13 20:56 cavehubiao 阅读(143) 评论(0) 推荐(0)
摘要:参看vs2008 memory文件里的auto_ptr定义。首先可以发现又一个auto_ptr_ref,好奇为什么多出这样一个东西。然后查看网上说明今天我在看The C++ Standard Library的时候,总觉的上面讲的关于auto_ptr_ref的问题没有说清楚,查了网上的资料发现也没有说清。 也许还有很多朋友像我一样对此存在疑问。其实,这个问题有没有弄清楚,对实际编程影像并不大,但是本着“勿在浮沙筑高台”的精神,我用了一个晚上的时间,来个彻底的大调查,终于基本上弄明白了其中的道理。(大多数时间都浪费在VC上,因为 VC支持对右值的非 常应用,而标准C++不可以,所以在VC中,有没有 阅读全文
posted @ 2013-12-03 18:18 cavehubiao 阅读(256) 评论(0) 推荐(0)
摘要:看到effective c++上总结的class rational{public: rational(int numerator=0,int denominator=1); friend const rational& operator*(const rational&lhs, const rational&rhs);private:int n,d;}inline const rational& operator*(const rational&lhs,const rational&rhs){ rational result(lhs.n*rhs. 阅读全文
posted @ 2013-11-26 22:31 cavehubiao 阅读(662) 评论(0) 推荐(0)
摘要:游戏的设计离不开多线程,在C++新标准出来之前,多线程的设计还是多以依赖特定系统的函数库或者某些特定的函数库为主,如同SDL,打开多线程的函数也主要是C函数。我们当然很期待boost中真正意义上的C++多线程类的加入,不过仍然需要等待。问题就出在打开多线程的C函数上,因为他们通常调用的是函数指针,但是在C++中,我们通常把函数绑定到了与其数据相关的类中,也就是说,我们在C++中很少用到“单身”的函数,成员函数可以被那些调用函数指针的启动多线程的函数调用吗? 答案是:通常不行,但是静态成员函数例外。 在C++中,函数指针与成员函数指针完全是两个概念,并且相互之间在任何情况下,无法转换! 我们来. 阅读全文
posted @ 2013-11-09 22:43 cavehubiao 阅读(165) 评论(0) 推荐(0)
摘要:// ELF Hash Function unsigned int ELFHash(char *str) { unsigned int hash = 0; unsigned int x = 0; while (*str) { hash = (hash >28 hash ^= (x >> 24); //上面这行代码并不会对X有影响,本身X和hash的高4位相同,下面这行代码&~即对28-31(高4位)位清零。 hash &= ~x; }... 阅读全文
posted @ 2013-11-03 23:09 cavehubiao 阅读(268) 评论(0) 推荐(0)
摘要:我一直以为同一个类的不同对象不能访问对方的私有变量今天看到别人问深拷贝的问题,突然想到为什么copy constructor里可以直接访问对方的私有成员指针。后来一查发现c++ private保护是在类级别不是对象级别...这要是被问到就丢人了... 阅读全文
posted @ 2013-10-21 22:40 cavehubiao 阅读(119) 评论(0) 推荐(0)
摘要:开始用gui-cmake,一直提示找不到BOOST_ROOT,我环境变量改过几次还是找不到,后来直接在命令行下用cmake 成功了,参数不大懂,大概看了个明白照别人的写的,还是有点略坑,别人用的2010 ,complier是 visiual studio 10,我用2008 于是改成9就是不过,后来后面加上2008就好了...1 cd ..2 mkdir cpp-netlib-build3 cd cpp-netlib-build4 cmake.exe -G "Visual Studio 9 2008" -DBOOST_ROOT:string="e:\lib\Boo 阅读全文
posted @ 2013-10-06 02:58 cavehubiao 阅读(856) 评论(0) 推荐(0)
摘要:首先,介绍几个基本概念:(主要摘自百度百科) 字长:在同一时间中处理二进制数的位数叫字长。通常称处理字长为8位数据的CPU叫8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据。二进制的每一个0或1是组成二进制的最小单位,称为一个比特(bit)。 一般说来,计算机在同一时间内处理的一组二进制数称为一个计算机的“字”,而这组二进制数的位数就是“字长”。字长与计算机的功能和用途有很大的关系, 是计算机的一个重要技术指标。字长直接反映了一台计算机的计算精度,为适应不同的要求及协调运算精度和硬件造价间的关系,大多数计算机均支持变字长运算, 即机内可实现半字长、全字长(或单字长)和... 阅读全文
posted @ 2013-09-30 21:37 cavehubiao 阅读(227) 评论(0) 推荐(0)