
c/c++
文章平均质量分 88
yacper
Anything but ordinary!
A gamer and game programer!
展开
-
堆和栈的区别
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由O转载 2011-07-07 15:48:18 · 748 阅读 · 0 评论 -
掀起你的盖头来——谈VC 对象模型
一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。Insidethe C++ ObjectModel虽然是一本好书,然而,书的篇幅多一些,又和具体的VC++关系小一些。因此,从篇幅和内容来看,译者认为本文是深入理解C++对象模型比较好的一个出发点。 这篇文章以前看到时转载 2009-12-22 10:34:00 · 576 阅读 · 0 评论 -
dynamic_cast详解
http://blog.youkuaiyun.com/wingfiring/archive/2006/03/22/633033.aspx 作为四个内部类型转换操作符之一的dynamic_cast和传统的C风格的强制类型转换有着巨大的差别。除了dynamic_cast以外的转换,其行为的都是在编译期就得以确定的,转换是否成功,并不依赖被转换的对象。而dynamic_cast则不然。在这里,不再讨转载 2009-12-22 10:26:00 · 992 阅读 · 0 评论 -
MFC六大关键技术之运行时类型识别
运行时类型识别(RTTI)即是程序执行过程中知道某个对象属于某个类,我们平时用C++编程接触的RTTI一般是编译器的RTTI,即是在新版本的VC++编译器里面选用“使能RTTI”,然后载入typeinfo.h文件,就可以使用一个叫typeid()的运算子,它的地位与在C++编程中的sizeof()运算子类似的地方(包含一个头文件,然后就有一个熟悉好用的函数)。typdid()关键的地方是可转载 2009-12-21 19:46:00 · 703 阅读 · 0 评论 -
子类类型检查的一种简单机制
在使用继承的时候,经常是在父类的基础上创建多种子类,使用时,通过父类的指针的指针来指向子类的实例,或者,以父类为类型的vector,list等存储子类的指针: class a;class b: a{};a* oriPtr = new b();vector oriVec;oriVec.Push_Back(new b());oriVec.Push_Back(new原创 2009-12-21 15:51:00 · 828 阅读 · 0 评论 -
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转载)
C 风格(C-style)强制转型如下:(T) exdivssion // cast exdivssion to be of type T函数风格(Function-style)强制转型使用这样的语法:T(exdivssion) // cast exdivssion to be of type T 这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的转载 2009-12-22 10:33:00 · 539 阅读 · 0 评论 -
关于typeid —— typeid和RTTI C++
关于typeid —— typeid和RTTI C++ 收藏 观点有一些值得商榷的地方关于typeid和RTTI的问答 问:在c++里怎么能知道一转载 2009-12-21 19:16:00 · 961 阅读 · 0 评论 -
C++调试堆
内存管理和调试堆 描述堆函数的“Debug”版本。这些函数解决两个最难处理的内存分配问题:改写已分配缓冲区的结尾和内存泄漏(当不再需要分配后未能释放它们)。 调试堆中的块类型 描述在调试堆中内存块所分配到的五种分配类型。出于泄漏检测和状态报告的目的,以不同方式对这些分配类型进行跟踪和报告。 调试堆 提供有关使用调试堆的信息。信息包括:哪些调用用于“Debug”版本,释放内存块时转载 2009-12-21 19:53:00 · 1532 阅读 · 0 评论 -
const使用小结--带领你永久突破识别申明,定义语句的障碍
多年来一直对const不是抠的很清楚,最近看了《the c++ templates》,在图书约定中目睹了更高级的变量声明方法,才慢慢明白const的真正用法。以前看《c++ primer》,作者告诉你怎样看一个使用到了const的语句:const int a; -- “从右向左看”。我一直没搞清楚这句话的意思,究竟怎样从右向左看呢???在《C++ Templates》中,我原创 2009-12-17 13:29:00 · 1009 阅读 · 1 评论 -
c++接口类的实现
c++不像java一样有纯接口类的的语法,但我们可以通过一些手段实现相同的功能。 一:考虑这样的代码: class A{protected: virtual ~A() { cout }};class B : public A{public: virtual ~B()原创 2010-02-19 15:51:00 · 5686 阅读 · 6 评论 -
为什么定义类的时候,一定要让它的析构函数为虚的?
其实这是effect c++的一个准则,无奈呆傻蠢笨,老是忘记,隧写下以铭记。 一:class A{public: ~A() { cout }};class B : public A{public: ~B() { cout }};int _tmai原创 2010-02-19 15:12:00 · 1331 阅读 · 0 评论 -
最快速度找到内存泄漏
确认是否存在内存泄漏我们知道,MFC程序如果检测到存在内存泄漏,退出程序的时候会在调试窗口提醒内存泄漏。例如:class CMyApp : public CWinApp{public: BOOL InitApplication() { int* leak = new int[10];转载 2009-12-10 13:40:00 · 860 阅读 · 0 评论 -
好的内存池-why可回收内存池
内存池相信都不陌生,实现的方法也有很多,简单的,复杂的,不一而足,网上也有很多现成的实现代码。 但大多有一个缺点,不可回收--也就是说刚开始那内存池分配的是多大,程序运行期间就一直那么大。 这种实现方式被大量的内存池实现所应用,比较简单,效率也比较高,但其还是有局限的。 大家可以试一下,当你在运行一个大的程序,该程序占据了大量的内存,此时你把它最小化,在windows任务管原创 2010-03-12 01:29:00 · 1191 阅读 · 1 评论 -
宏展开
最近实在太忙,经常能搞到12点以后,唉....随便写点,不然又要废了... 关于红展开,其实宏本身是很简单的,但是有的时候看到一些开源软件里强大复杂的宏写法,还真是心里毛毛的,毕竟看这玩意是需要很强的耐心的,但是没关系,很多编译器都支持预处理展开宏,这里说一下vs的操作方式: 在visual studio 中,选择项目属性-〉配置属性-〉原创 2010-03-11 21:54:00 · 3224 阅读 · 0 评论 -
C语言深入浅出可变参数函数的使用技巧
<br />注意:可变参数函数只有在参数是ansi的情况下才有用,即使参数是引用也不行。<br /> <br /> <br />深入浅出可变参数函数的使用技巧本文主要介绍可变参数的函数使用,然后分析它的原理,程序员自己如何对它们实<br />现和封装,最后是可能会出现的问题和避免措施。<br />VA函数(variable argument function),参数个数可变函数,又称可变参数函数<br />。C/C++编程中,系统提供给编程人员的va函数很少。*printf()/*scanf()系列转载 2010-11-03 20:36:00 · 845 阅读 · 0 评论 -
程序栈,函数栈,cmake对vc默认设置程序堆栈10m的浅见
<br />想起这玩意,是今天在玩cmake的时候触发的,cmake在生成vs项目时,默认会使用/STACK:10000000,将程序堆栈设成10m。<br /> <br />突然想到程序栈,函数栈的问题。<br /> <br />由于操作系统,c语言学习良久,这两个东东到还真未必十分明了。<br /> <br />思索了一下,大致的关系的应该是一个程序一个栈,函数堆栈是在程序进入函数时,动态的在程序栈上分配的,所以,制定函数堆栈大小应该是没有意义的,比如在递归函数中,函数栈可能很大,这时如果按照一般情况下原创 2010-10-21 16:31:00 · 2920 阅读 · 1 评论 -
Genericity/STL 大系
作者简介:侯捷,台湾电脑技术作家,着译评兼擅。常着文章自娱,颇示己志。 个人网站:www.jjhou.com 北京镜站:www.youkuaiyun.com/expert/jjhou 如果有一项技术,可以让你的程式码处理各种不同的资料型别,甚至是目前未知的资料型别,你喜欢吗? 我会欣喜若狂。 基本上这就是「可复用性转载 2010-04-25 22:45:00 · 1519 阅读 · 0 评论 -
C++/OOP 大系
作者简介:侯捷,台湾电脑技术作家,着译评兼擅。常着文章自娱,颇示己志。 个人网站:www.jjhou.com 北京镜站:www.youkuaiyun.com/expert/jjhou ●开场白 《程序员》杂志邀我开一个专栏。我向来期待一本为程序员打造、以程序员为主体对象的刊物,因此这样的邀请很难推却。再加上蒋涛先生与我的私交,我於是要求自己,尽可转载 2010-04-25 22:44:00 · 1008 阅读 · 0 评论 -
几本COM的书籍
介绍几本COM的书籍 韩少勇 最有效的获取知识的途径就是读书,当然要读好书。难怪古人把求学也称作“念书”。引言实际上,写一些介绍电脑图书的文章是我长久以来的愿望。一方面由于我的朋友们经常让我为他们推荐一些切实有用的书,另一方面的原因是我在早些时候的学习并不很顺利原创 2010-04-25 17:57:00 · 2189 阅读 · 0 评论 -
wndows头文件中提供的位运算宏及地址强转操作符的小节(BYTE,WORD,DWORD,MAKEWORD,LOWORD,LOBYTE.....)
使用vc经常会碰到使用MAKEWORD,LOWORD,LOBYTE等的情况,那么分析一下吧! 一.类型解析符(BYTE,WORD,DWORD)学过汇编应该知道,一个数据过来了,其到底代表什么,需要我们自己指定,我们可以指定其读取方式是字节,字,或双字,如下: DWORD dw = 0xffaabbcc; //这是一个32位的值 DWORD d原创 2010-01-08 15:54:00 · 3737 阅读 · 0 评论 -
进程间通信
摘 要 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求。编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的。Microsoft Win32 API提供了多种进程间通信的方法,全面地阐述了这些方法的特点,并加以比较和分析,希望能给读者选择通信方法提供参考。转载 2010-01-04 21:48:00 · 533 阅读 · 0 评论 -
进程间通信之邮槽
简介有时候我们需要一个程序与另一个程序之间进行通信。你可能在多台机器上有多个服务器运行,而在一个中央位置对一个或多个服务器进行远程监控。Windows平台为我们提供了一系列通信方式,从Socket到命名管道,DDE,DCOM,邮槽等。本文中作者将探讨邮槽这一通信机制,假定读者熟悉CreateFile(),ReadFile(),WriteFile()等A转载 2010-01-04 21:36:00 · 782 阅读 · 0 评论 -
复制并正确使用csdn文章中使用“插入代码”插入的代码
用过csdn插入代码的人都知道,这玩意虽然不怎么理想,但总比自己在那边手动调强那么一点点,前后2行的颜色交叉也着实让人看着很不舒服,这个还能权且凑合,但复制下来的代码前面都带行号("1.")却令人着实不爽,能不成还得手动去掉行号吗? 只能说csdn太不贴心了,不过没关系,利用正则表达式的强大特性,就能轻松搞定!(事实是好久没用了,活动一下:) 将代码复制到vs中后,打开查找替换界面原创 2010-03-13 16:42:00 · 2662 阅读 · 2 评论 -
在窗口应用中使用printf,cout 等将输出重定向到console
#include #include #include #include #include using namespace std ; int _tmain (int argc , _TCHAR * argv []) { AllocConsole (); // 为一个进程定位一个console ,如果是win32原创 2010-03-13 16:01:00 · 6628 阅读 · 1 评论 -
用VC++实现Console程序显示彩色文本
用vc++写console程序时,整天对着黑纸白字的屏幕,感觉很郁闷吧?很多人想用CONIO.H/GRAPHICS.H中的一些函数来实现,却发现VC++根本没有这些头文件。当然了CONIO.H/GRAPHICS.H是BORLANDTC/BC专有的头文件,所以vc++中根本没有这些文件。把这两个头文件COPY过来,然后用??答案当然是否定的。其实VC++中也有相关的函数来实现consol转载 2010-03-13 15:34:00 · 1087 阅读 · 0 评论 -
C++中extern “C”含义深层探索(在原作的基础上修改)
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE原创 2010-01-30 17:47:00 · 1051 阅读 · 0 评论 -
explicit构造函数
explicit作用:在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。explicit使用注意事项: * explicit 关键字只能用于类内部的构造函数声明上。 * explicit 关键字作用于单个参数的构造函数。 * 在C++中,expli转载 2010-01-27 16:33:00 · 906 阅读 · 0 评论 -
模板参数的编译时检查方法,利用typedef
很多情况下,你需要使用模板参数,但又不知道用户输入的模板参数是否正确,是否在范围内等,此时可以利用typedef的特性实现一种模板参数检查机制。template //模板参数sz默认=0class templateClass{ typedef int testArray[ ( sz ....}注:typedef的这个in原创 2010-01-28 11:39:00 · 1608 阅读 · 0 评论 -
时间简单处理
// time since 1971 1/1 00:00 time_t ti = time(NULL);//transform it as local tm* t = localtime(&ti);//format itstrftime(&buff, MAX_PATH, "[%m/%d/%y %H:%M:%S] ", t); and the buff contains原创 2009-11-02 20:20:00 · 640 阅读 · 0 评论 -
typedef
1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。 至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。2. typedef转载 2009-11-02 17:04:00 · 934 阅读 · 0 评论 -
32位version类, 结合匿名struct
一般version都是由4个部分表示,简单的可以用一个4个byte的struct来表示: struct Version32{ union { struct { BYTE v0; BYTE v1; BYTE v2; BYTE v3; }; DWORD ver; //union结合这个DWORD使程序变的异常清晰原创 2009-11-02 20:45:00 · 1012 阅读 · 0 评论 -
cpuid & systemInfo & osVersion
cpuid:这玩意的关键在于cpuid这个汇编指令,通过给eax设置不同的值,然后调用cpuid能获取当前cpu的不同的属性,具体的,msdn竟然给出了一个完整的例子,这例子使用c++结合win32汇编的方式,并且完全实用。 systemInfo 直接调win32函数:SYSTEM_INFO sysInfo;GetSystemInfo(&sysInfo); OS原创 2009-11-02 20:02:00 · 859 阅读 · 0 评论 -
RAII -- Resource Acquisition Is Initialization
RAII,资源获取即初始化。这个东西本不是什么高深的东西,日常写代码时也经常用到,其实就是将资源与对象的生命周期绑定,具体的做法就是在构造函数中初始话资源,在析构函数中释放资源,这样使用这个对象的时候甚至无需手动对其进行任何内存操作,从而保证内存不会泄露。wiki的一段:Resource Acquisition Is Initialization, often referred to by原创 2009-11-06 16:59:00 · 868 阅读 · 0 评论 -
fstream不支持中文文件名的问题
所谓不支持中文文件名就是无法“读,写”含有中文的文件。 stream流就是这么锁,无论如何一定不能忘记指定。 保存为中文文件名时发生了乱码.ofstream of(szFilename);ofof.close();解决方法1、使用C语言的函数设置为中文运行环境setlocale(LC_ALL,"");2、使用STL函数设置为系统语言环境std::locale::gl转载 2009-11-06 16:56:00 · 1463 阅读 · 0 评论 -
vs中在查找替换中使用正则表达式
在写程序时,如果一开始没有考虑到可移植性,把字符串都写成了: "hello,world!"到了后面,想把大量的这里字符串替换成: _T"hello,world!"这该如何是好呢,作为一个合格的程序员,请不要一个个的改,不然会被人鄙视的...而在vs中,提供了简单解决这玩意的方法,事实上也不简单,我查了一个小时才学会的。关键就是正则表达式,关于正则表达式,以下有一篇很好的正原创 2009-11-04 17:10:00 · 12608 阅读 · 2 评论 -
对inline函数使用单独的定义文件
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE原创 2009-10-21 23:22:00 · 849 阅读 · 0 评论 -
前置申明的正确用法
简单的说,前置申明就是告诉编译器这个变量已经在其他地方实现了,你编译器在一定的条件下就可以只管编,别管我到底是怎么实现的。而这个特定情况,就是编译器不需要知道这个变量的类型的具体实现的情况下。什么情况下是编译器不需要知道这个变量的类型的具体信息呢? 1.这个变量是一个指针。 2.这个变量是一个引用。指针和引用因为本身都是四个字节的一种特殊类型,他们能指向其他的变量。原创 2009-09-03 19:27:00 · 792 阅读 · 0 评论 -
编程小技巧-申明类
一般情况下,在调用另一个排版在后面的函数的时候,肯定需要在前面申明一下这个函数。相似的情况也可用于类的使用,也可以在文件前面申明一下这个类:class CMainFrame;相当于在前面#include "mainframe.h"还是小有用处的,也增加了清晰性:)原创 2008-12-04 21:49:00 · 548 阅读 · 0 评论 -
pragma,包含外部链接库的方法
写程序的时候,经常碰到要加载其他库的时候,比如directx编程,网络编程,都需要加载相应的库,而这时一般你需要在vc的linker选项,或手工编译/lib,但现在有一个更好的方法,利用pragma,也就是c语言的预编译指令,这个在vc中做了扩展#pragma comment(lib, "wsock32.lib")如此就能在编译的时候调入需要的库了,实在太棒了啊!!!原创 2008-12-03 17:37:00 · 2526 阅读 · 1 评论 -
一个stlport 与vs自带stl的生动事例
Development - STLPort versus Microsoft STL performanceThe product I work on uses STL in quite an aggressive way and also it permeates all of the source code, so any change to the performance of转载 2009-11-15 02:41:00 · 1275 阅读 · 0 评论