随笔分类 -  理解

摘要:“标准容器中存放引用”与“指向引用的指针(pointer to reference)” 大家都知道,标准容器中是“按值”存放并操纵存放于其中的实例的,不允许在标准容器中存放“引用” 。 vector<int&> a; 编译过后,会出现一大堆的错误,但是我们可以很容易找到“pointer to reference is illegal”之类 的字眼儿,即“指向引用的指针”是非法的:因为容器中很可能有... 阅读全文
posted @ 2011-04-01 00:14 dzqabc 阅读(951) 评论(0) 推荐(0)
摘要:template<class T>void func1(T &, T &) {}template<class TT>void func2(TT, TT) {}int main(){ int a[10], b[10], c[20]; func1(a, b); //OK, 数组引用 func1(b, c); //ERROR,形参为引用时, 数组不能转换为指针, //b,c类型(数组长度)不匹配,参考C++ Primer P538 func2(a, b); //OK,作为数组指针 func2(b, c); //OK,作为数组指针 return 0;}1 .在C 阅读全文
posted @ 2011-01-27 00:00 dzqabc 阅读(1433) 评论(0) 推荐(0)
摘要:C++中变量生存期与VB中大不相同,C++中非静态局部变量的生存周期仅限于其声明所在的块(即程序中对应的大括弧)中,在退出块时便会释放掉内存。例:class destruct{public: int mem; destruct() { mem = 0; } ~destruct() { mem++; }};void main(){ int * pa = NULL; { destruct odestruct; } if (true) { int a = 10; pa = &a; } for (int i = 0; i < 10; i++) { i++; } (*pa)++; cout 阅读全文
posted @ 2011-01-26 23:35 dzqabc 阅读(341) 评论(1) 推荐(0)
摘要:#include "stdafx.h"#include <iostream>using namespace std;int globalJ =999;//返回值int test1(){ int j =1; cout<<"in test1(),[return value] the varaible j's address :"<<&j<<endl; return j;}//使用局部变量,返回引用int& test2(){int j =998;cout<<"in t 阅读全文
posted @ 2011-01-26 23:32 dzqabc 阅读(286) 评论(0) 推荐(0)
摘要:堆与栈比较1.管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。2.空间大小:一般来讲在32位系统下,堆内存可以达到4G的空间,从这个角度来看堆内存几乎是没有什么限制的。但是对于栈来讲,一般都是有一定的空间大小的,例如,在VC6下面,默认的栈空间大小是1M(好像是,记不清楚了)。当然,我们可以修改: 打开工程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后在Reserve中设定堆栈的最大值和commit。注意:reserve最小值为4Byte;c 阅读全文
posted @ 2010-09-08 23:26 dzqabc 阅读(217) 评论(0) 推荐(0)
摘要:在VC2008中编程如下: TempValue.Format("%d",m_CH1_Value); //TempValue为Cstring类型,m_CH1_Value为Int类型编译之后出现1>e:\project\cplus\control\control\controldlg.cpp(200) :error C2664: “void ATL::CStringT<BaseType,StringTraits>::Format(constwchar_t *,...)”: 不能将参数1 从“const char [3]”转换为“const wchar_t *” 阅读全文
posted @ 2010-08-12 23:35 dzqabc 阅读(1599) 评论(0) 推荐(0)
摘要:在一些大的工程中,可能会包含几十个基础类,免不了之间会互相引用 ( 不满足继承关系,而是组合关系 ) 。也就是需要互相声明。好了,这时候会带来一些混乱。如果处理得不好,会搞得一团糟,根据我的经验,简单谈谈自已的处理办法:编码时,我们一般会尽量避免 include 头文件,而是采用声明 class XXX 。 但有时候还是必须用 Include 头文件,那么,两者的划分在于什么呢?应该是很明确的,但书上好像都少有提及。首先: 我们要明白为什么要用声明取代头文件包含:对了,是为了避免无必要的重编译 ( 在头文件发生变更时 ) 。 工程较大,低速机,或基础类经常变更 ( 不合理的设计吧 ) ,编译. 阅读全文
posted @ 2010-08-10 23:51 dzqabc 阅读(1895) 评论(0) 推荐(1)
摘要:"在共享DLL中使用MFC"指的是打包时一些MFC的DLL的内容没有被硬编码到在EXE文件中,所以EXE会文件较小,但是运行时要求运行的系统环境中要有相关的DLL文件. "在静态库中使用MFC"是将DLL对应的lib静态库中的相关代码硬编码到EXE文件中,文件较大,但是可以在没有已经被包含DLL的机器上运行,当然即使如此也并非所有的DLL都会将其硬编码到Exe中,因此仍然某些DLL是必须的.比如Redistributable Package中的某些DLL. 阅读全文
posted @ 2010-07-31 15:10 dzqabc 阅读(829) 评论(0) 推荐(0)
摘要:摘自:MSDN 1.由于服务必须从服务控制管理器的上下文中运行,而不是从 Visual Studio 中运行,因此调试服务不像调试其他 Visual Studio 应用程序类型那样简单。若要调试服务,必须首先启动服务,然后将一个调试器附加到正在运行服务的进程中(AttachToProcess)。 附加到服务的进程使您能够调试大多数服务代码,但并非全部;例如,由于服务已经启动,因此不能用这种方法调试服务的 OnStart 方法中的代码,或调试用于加载服务的 Main 方法中的代码。(不断循环的那块代码当然可以调试,只是不能调试初始化服务运行环境的线程的代码,和服务线程中初始化部分代码(初始化代码 阅读全文
posted @ 2010-07-30 00:42 dzqabc 阅读(4547) 评论(0) 推荐(0)
摘要:VS2008 lib静态链接一、 静态链接库与动态链接库区别静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。如果在当前工程中有多处对dll文 阅读全文
posted @ 2010-07-22 17:23 dzqabc 阅读(7316) 评论(0) 推荐(2)
摘要:Windows将遵循下面的搜索顺序来定位DLL: 1.包含EXE文件的目录, 2.进程的当前工作目录, 3.Windows系统目录, 4.Windows目录, 5.列在Path环境变量中的一系列目录。 阅读全文
posted @ 2010-07-21 20:45 dzqabc 阅读(427) 评论(0) 推荐(0)
摘要:1:把dll的项目直接放进带有exe启动的项目,引用,调试(放在一个Workspace或者是solution中,这样应该可以连调了)2:直接启动dll项目: 项目属性的“启动操作”里把调试模式该为程序,并在“启动应用程序”栏选取exe程序。(2005中设置是项目属性->配置属性->调试->命令中指定会调用该dll的Exe程序) 这样vs.studio会先把那个exe启动起来。当然那个exe如果调用了这个dll的话,在这里设置断点就没问题了。 比如,我提供了一个exe程序,里面有一大堆的处理,其中一个需要调用xx.dll。某开发者只有xx.dll的源码,没有exe的源码,但是又 阅读全文
posted @ 2010-07-19 23:29 dzqabc 阅读(440) 评论(0) 推荐(0)
摘要:1.对象变量与对象本身是不同的,对象变量代表了对象真实数据在内存中的地址,可以粗略认为对象变量就是内存地址.而对象则是存储对象所用的整块内存区域. 传值的参数本身是传递的变量被复制一份,但对于对象变量实际上是将其值(所代表对象的内存地址)复制一份,因此这并不意味着它所代表的对象也被复制一份. 阅读全文
posted @ 2010-04-04 00:52 dzqabc 阅读(366) 评论(0) 推荐(0)
摘要:「System」「Local Service」「Network Service」执行程序时的区别「System」执行某些程序也会不正常 如:OpenOffice,因为system账户没有填写注册信息(由于system无用户界面所以无法进行与账户对应的用户信息的输入)所以system无法使用该软件*个人总结,仅供参考 阅读全文
posted @ 2009-12-18 10:04 dzqabc 阅读(217) 评论(0) 推荐(0)
摘要:◎Design Pattern: Abstract Factory 模式 我们平日走在步人街上都能看到很多专卖店,服装、珠宝等等;拿服装专卖店来说,一个专卖店里面肯定有好几个品牌的服装,比如Giordano、Baleno,这些品牌都是不同公司生产的。没人见个专卖店自己生产服装的吧,专卖店需要某个品牌的服装时,就去联系相应的厂家供货即可,具体的生产是由厂家去完成。抽象工厂模式也是如此,抽象工厂提供多个抽象方法,由具体的子工厂去实现。现在我想开一家服装店,经营上衣和短裤,至于具体什么品牌的等选门面在装修之时再定。interfaceISpecialityShop{ShirtcreateShirt(. 阅读全文
posted @ 2009-10-13 13:46 dzqabc 阅读(193) 评论(0) 推荐(0)
摘要:VC中的Just-in-time调试,使用该调试模式应用程序可以再Visual C++开发环境之外运行知道发生一个错误.当遇到一个程序错误时,Just-in-time调试自动加载Visual C++ Debugger .要打开Just-in-time调试只需要修改Tools->Options->Just-in-time debugging选项即可(其实该选项所做的操作就是写了个注册表,将自己作为其他程序抛出异常时的处理程序,下面有介绍) 设置即时调试断点,在编译生成的Debug版本程序中加入断点异常,在代码中硬编码一个断点(相当于让程序出错),让程序在到达程序员希望停止位置时加载已 阅读全文
posted @ 2009-09-18 23:08 dzqabc 阅读(3648) 评论(0) 推荐(0)
摘要:作为一个程序员在桌面检查时,必须经常考虑到输入不可能的非正常数据,确定程序走向,所以程序员应该牢记墨菲法则墨菲法则 墨菲定律(Murphy's Law),亦称莫非定律、莫非定理、或摩菲定理,是西方世界常用的俚语。墨菲定律主要内容是:事情如果有变坏的可能,不管这种可能性有多小,它总会发生。比如你衣袋里有两把钥匙,一把是你房间的,一把是汽车的,如果你现在想拿出车钥匙,会发生什么?是的,你往往是拿出了房间钥匙。 “墨菲法则”、“派金森定理”和“彼得原理”并称为二十世纪西方文化中最杰出的三大发现。溯源 墨菲定律的原话是这样说的:If there are two or more ways to 阅读全文
posted @ 2009-09-12 08:25 dzqabc 阅读(661) 评论(0) 推荐(0)
摘要:关于Debug&Release在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当头一棒啊,可是疼归疼,问题总要解决,下面将讲述一下我的几点经验,看看是不是其中之一:1. 变量。大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc(注1),而release的赋值近似于随机(我想是直接从内存中分配的,没有初始化过)。这样就明确了,如果你的程序中的某个变量没被初始化就被引用,就很有可能出现异常:用作控制变量将导致流程导向不一致;用作数 阅读全文
posted @ 2009-09-07 22:38 dzqabc 阅读(1459) 评论(0) 推荐(0)
摘要:在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。 可能说到这里,很多人还不明白什么是栈空间,其实栈空间就是指放置程序的局部数据也就是函数内数据的内存空间 ,在系统下,栈空间是有限的 ,如果频繁大量的使用就会造成因栈空间不足所造成的程序出错的问题,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。 下面我们来看一个例子:#include <iostream> #include <string> using namespace std; inline string dbtest(int ... 阅读全文
posted @ 2009-09-03 23:46 dzqabc 阅读(413) 评论(0) 推荐(0)
摘要:开篇十个问题问题1 作为一个c/c++程序员,你的所有子程序代码都封装在函数体内,你知道还有其他类型的子程序否(与c/c++不同,许多语言还有另外一种类型的子程序成为过程)?问题2 你是否知道过程子程序和函数子程序之间的所有区别?问题3 你是否学习过如何解析一个表达式,考虑到操作符的优先级?问题4 你是否知道属于先行EOF(look-ahead EOF)和非先行EOF(non-look-ahead)的含义?问题5 你是否知道预读(priming read)语句的含义问题6 你是否知道标记循环指的是什么?问题7 你是否知道 static(静态)键字在内层,外层以及作为一个(数据或方法)类成员的作 阅读全文
posted @ 2009-08-30 21:58 dzqabc 阅读(1931) 评论(0) 推荐(0)